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

*wait():让一个线程等待。知道别的线程来通知(别的线程.notify唤醒)
*wait(long timeout)
*notify():唤醒一个处于等待的(wait())线程
*notifyAll()
!!!1、为什么这个线程的通信的方法都是Object类啊这个问题:
因为每个对象都是有锁的啊。我们锁的东西是java对象,而我们的线程是可以获取这个对象的(将这个对象理解为一个资源咯)。现在我们线程需要去等待某些锁了,我们就只需要去调用对象的wait()(他就是表示线程等待的嘛)方法了。如果我们是吧wait()定义在Thread的话,那么我们等待的那个锁就不明确了。
- 在这个生产者和消费者问题里面:(不同线程通信的问题)
- 只有synchronized是不够的:
对于synchronized的分析:
- Syn只能阻止并发更新同一个资源的问题,用这个syn关键字实现了同步
- Syn是不能用于不同线程之间的消息传递(线程通信)

解决方式1:(管程法)

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

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