线程通信方式

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、volatile关键字

1、保证多项成环境下共享变量的可见性。一般情况下,多线程环境下,一个线程对共享变量的操作其他线程是不可见的,但被volatile修饰后,线程本地变量会失效,当一个线程修改共享变量后,会立刻刷新至主存中,其他线程从主存中直接获取数据。
2、禁止指令重排。重排是指编译器和处理器为了优化代码效率使得指令进行重排序,在单线程中不会受到影响,但多线程环境中可能会受到影响。而用volatile修饰的变量,可以通过在内存中插入屏障,使得执行到volatile修饰的变量,前面的程序已经执行完,后面的程序还未执行。

底层原理

在生成的汇编代码中,会出现一个lock前缀指令,这个指令相当于一个内存屏障,主要可以实现:
(1)内存屏障可以使其前面的指令不会被重排至内存屏障后,也不会使其后的指令重排至屏障之前。
(2)强制将缓存中数据的修改刷新至内存。

二、wait、notify

线程调用wait方法后,会释放锁进入等待状态;等到满足条件时其他线程可以通过调用notify唤醒等待的线程。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值