16、线程通信(是两个线程(生产者消费者问题))

线程通信(是两个线程(生产者消费者问题))

 

*wait():让一个线程等待。知道别的线程来通知(别的线程.notify唤醒)

*wait(long timeout)

*notify():唤醒一个处于等待的(wait())线程

*notifyAll()

!!!1、为什么这个线程的通信的方法都是Object类啊这个问题:

因为每个对象都是有锁的啊。我们锁的东西是java对象,而我们的线程是可以获取这个对象的(将这个对象理解为一个资源咯)。现在我们线程需要去等待某些锁了,我们就只需要去调用对象的wait()(他就是表示线程等待的嘛)方法了。如果我们是吧wait()定义在Thread的话,那么我们等待的那个锁就不明确了。

  1. 在这个生产者和消费者问题里面:(不同线程通信的问题)
  1. 只有synchronized是不够的:

对于synchronized的分析:

  1. Syn只能阻止并发更新同一个资源的问题,用这个syn关键字实现了同步
  2. Syn是不能用于不同线程之间的消息传递(线程通信)

 

解决方式1:(管程法)

 

解决方式2:(信号灯法)

 


版权声明:本文为logtcm4原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。