Java线程之间的通信
-
volatile 变量的写 - 读
这一点是利用了 volatile 写 和 读之间规则,也就是:volatile变量写完以后,会将写好的变量值立刻刷新到主存里面, volatile变量被读之前,会先从主存中里面读取这个 volatile变量的值,说到底,volatile变量 就是借助于规则和主存这两个必要条件来进行线程间的通信。如果 volatile 变量 和 其他变量都在一起,其他变量的值会随着 volatile变量 一起刷新到主存。对于其他变量的值,感觉就是抱着volatile变量大佬的腿进行线程之间安全的通信。
volatile 是怎么实现这种规则的呢?通过内存屏障禁止处理器重排序
解释一下内存屏障的指令 -
synchronized 关键字
synchronized关键字本质上是利用 监视器进行通信,并且具有可见性和排他性
-
等待 / 通知机制
等待通知机制和 消费者生产者模式很像,估计这也就是面试官为什么经常问这个问题的原因。这个模式的好处应该有两个:①,是一种线程之间的通信机制。②,这种模式在功能上实现解耦,在体系结构上具备了良好的伸缩性。notify() notifyAll()
将等待队列中的等待线程从等待队列中移动到同步队列中
wait() wait(long)
线程状态由RUNNING 变为 WAITING状态
-
管道输入 / 输出流
主要用于线程之间的数据传输。传输媒介为内存
Thread.join() 的使用
- ThreadLocal 的使用