Java中的volatile关键字

volatile的作用

可见性

禁止指令重排序

保证原子性(一定程度上)

volatile关键字和synchronized关键字的区别

总结

Java中的volatile关键字主要是应用于多线程中编程的,用于保证共享变量的可见性和原子性。

volatile的作用

可见性

volatile具有保证数据可见性的作用。这个可见性是对于所有有可能调用到被volatile修饰的变量的线程而言的。

保证可见性就是当其中一个线程对volatile修饰的变量进行修改的时候,修改完后其他线程可以立即看到这个修改。

禁止指令重排序

编译器和处理器在编译和执行代码时,可能会对指令进行重排序,但是volatile关键字可以禁止这种重排序,保证了程序的正确性。

保证原子性(一定程度上)

volatile关键字可以保证一些简单的操作的原子性,例如++操作,但是对于复合操作,volatile关键字无法保证原子性。

volatile关键字和synchronized关键字的区别

  • volatile关键字保证了共享变量的可见性和禁止指令重排序,但是无法保证原子性,而synchronized关键字可以保证原子性、有序性和可见性。
  • volatile关键字适用于一些简单的操作,例如++操作,而synchronized关键字适用于复合操作。
  • .volatile关键字不会造成线程阻塞,而synchronized关键字可能会造成线程阻塞。

总结

在多线程的情况下,如果我们需要做一些比较简单的操作,比如++操作,而且要执行多次,这时候就可以选择volatile关键字,效率会更快一些,但无法保证原子性;而synchronized关键字就更能保证线程安全一些,不过有造成线程阻塞的风险,适合比较复杂但低频的操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>