线程间通信

例子:

对一个值+1 -1交替完成,a的值就是1 b的值就是0 这个过程就是线程间通信
Synchronized实现:



虚假唤醒问题:

我们再添加两个线程。

我们发现我们的结果就不对了。


我们只需要使用while即可。
我们线程通信的最后一步就是防止虚假通信的出现。
Lock实现:



运行结果:

这就是我们使用lock和synchronized两种方式进行线程的通信的基础学习。
线程间通信
例子:
对一个值+1 -1交替完成,a的值就是1 b的值就是0 这个过程就是线程间通信
Synchronized实现:
虚假唤醒问题:
我们再添加两个线程。
我们发现我们的结果就不对了。
我们只需要使用while即可。
我们线程通信的最后一步就是防止虚假通信的出现。
Lock实现:
运行结果:
这就是我们使用lock和synchronized两种方式进行线程的通信的基础学习。