java线程通信

来源:互联网 发布:opera linux 安装 编辑:程序博客网 时间:2024/06/13 06:02

在Java多线程的应用中有时需要线程之间需要一些协调通信,来共同完成一件任务。

线程通信主要有wait() 与 notify() 和 notifyAll()方法实现。

wait():令当前线程挂起并放弃CPU、同步资源,使别的线程可访问并修改共享资源,而当前线程排队等候再次对资源的访问

notify():唤醒正在排队等待同步资源的线程中优先级最高者结束等待
notifyAll ():唤醒正在排队等待资源的所有线程结束等待

在当前线程中调用方法:  对象名.wait()
使当前线程进入等待(某对象)状态 ,直到另一线程对该对象发出 notify (或notifyAll) 为止。
调用方法的必要条件:当前线程必须具有对该对象的监控权(加锁)
调用此方法后,当前线程将释放对象监控权  ,然后进入等待
在当前线程被notify后,要重新获得监控权,然后从断点处继续代码的执行。

在当前线程中调用方法:  对象名.notify()
功能:唤醒等待该对象监控权的一个线程。
调用方法的必要条件:当前线程必须具有对该对象的监控权(加锁)

class Communication implements Runnable{int i = 1;public void run() {while (true) {synchronized (this) {notify();if (i <= 100) {System.out.println(Thread.currentThread().getName() + ":"+ i++);}else   break;try {wait();} catch (InterruptedException e) {}}}}}










0 0
原创粉丝点击