黑马程序员技术交流社区

标题: 线程间通信 [打印本页]

作者: shero    时间: 2015-8-4 11:51
标题: 线程间通信
线程间通信:多个线程在操作同一个资源,但是操作的动作不同。

1.是不是两个或两个以上的线程。解决办法 两个线程都要被同步。
2.是不是同一个锁。解决办法 找同一个对象作为锁。

等待唤醒机制。

wait后,线程就会存在线程池中,notify后就会将线程池中的线程唤醒。
notifyAll();唤醒线程池中所有的线程。
实现方法 :

给资源加个标记 flag   

synchronized(r)
{
while(r.flag)//多个生产者和消费者   if(r.flag)//一个生产者和消费者
  r.wait();
  代码
   r.flag=true;
  r.notify();
  r.notifyAll();
}

上面三种方法都使用在同步中,因为要对持有监视器(锁)的线程操作。所以要使用在同步中,因为只有同步才具有锁。

为什么这些操作线程的方法要定义在object类中呢?
因为这些方法在操作同步中线程的是偶,都必须要表示它们所操作线程只有的锁。只有同一个锁上的被等待线程,可以被
同一个锁上的notify唤醒,不可以对不同锁中的线程进行唤醒。

也就是说,等待和唤醒必须是同一个锁,而锁可以是特意对象,可以被任意对象调用的方法定义在Object类中。

作者: 笑笑精灵    时间: 2015-8-5 14:47
谢谢分享!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2