java-JUC并发编程学习笔记03(尚硅谷)

线程间通信

java-JUC并发编程学习笔记03(尚硅谷)_第1张图片java-JUC并发编程学习笔记03(尚硅谷)_第2张图片

java-JUC并发编程学习笔记03(尚硅谷)_第3张图片

例子:

java-JUC并发编程学习笔记03(尚硅谷)_第4张图片

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

Synchronized实现:

java-JUC并发编程学习笔记03(尚硅谷)_第5张图片

java-JUC并发编程学习笔记03(尚硅谷)_第6张图片

虚假唤醒问题:

java-JUC并发编程学习笔记03(尚硅谷)_第7张图片

我们再添加两个线程。

java-JUC并发编程学习笔记03(尚硅谷)_第8张图片

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

java-JUC并发编程学习笔记03(尚硅谷)_第9张图片

java-JUC并发编程学习笔记03(尚硅谷)_第10张图片

我们只需要使用while即可。

我们线程通信的最后一步就是防止虚假通信的出现。

Lock实现:

java-JUC并发编程学习笔记03(尚硅谷)_第11张图片

java-JUC并发编程学习笔记03(尚硅谷)_第12张图片

java-JUC并发编程学习笔记03(尚硅谷)_第13张图片

运行结果:

java-JUC并发编程学习笔记03(尚硅谷)_第14张图片

这就是我们使用lock和synchronized两种方式进行线程的通信的基础学习。

你可能感兴趣的:(多线程并发编程,学习,笔记)