Java线程之间的通信

  1. volatile 变量的写 - 读

    这一点是利用了 volatile 写 和 读之间规则,也就是:volatile变量写完以后,会将写好的变量值立刻刷新到主存里面, volatile变量被读之前,会先从主存中里面读取这个 volatile变量的值,说到底,volatile变量 就是借助于规则和主存这两个必要条件来进行线程间的通信。如果 volatile 变量 和 其他变量都在一起,其他变量的值会随着 volatile变量 一起刷新到主存。对于其他变量的值,感觉就是抱着volatile变量大佬的腿进行线程之间安全的通信。
    图片来源互联网
    volatile 是怎么实现这种规则的呢?

    通过内存屏障禁止处理器重排序
    volatile 写 过程
    volatile 读过程
    解释一下内存屏障的指令

    内存屏障指令

  2. synchronized 关键字

    synchronized关键字本质上是利用 监视器进行通信,并且具有可见性排他性
    这里写图片描述

  3. 等待 / 通知机制
    等待通知机制和 消费者生产者模式很像,估计这也就是面试官为什么经常问这个问题的原因。这个模式的好处应该有两个:①,是一种线程之间的通信机制。②,这种模式在功能上实现解耦,在体系结构上具备了良好的伸缩性。

    notify() notifyAll()

    将等待队列中的等待线程从等待队列中移动到同步队列中

    wait() wait(long)

    线程状态由RUNNING 变为 WAITING状态

    WAIT Notify状态图

  4. 管道输入 / 输出流

    主要用于线程之间的数据传输。传输媒介为内存

  5. Thread.join() 的使用

  6. ThreadLocal 的使用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值