JAVA多线程同步:volatile,synchronized,Atomic... 比较

1.

Atomic..系列的对象属于

java.util.concurrent.atomic

在多线程程序中,能保证对该对象的操作的原子性,常用在需要做递增、递减操作的变量,如计数器。


2.

volatile

能保证所修饰的变量的在并发状态下的可见性,但无法保证原子性。

ps:

可见性是指,多个线程之间,总能看到变量的最新值。

原子性是,针对变量的读--改--写操作


只有当所修饰的变量满足如下条件时,才能用volatile做线程同步:

1. 对变量的写入操作不依赖于当前值。

2. 变量不会跟其他状态变量一起纳入不变性条件中。

即: —— 变量真正独立于其他变量和自己以前的值 —— 


3.
synchronized

既能保证可见性,又能保证原子性。

不过程序性能开销较大,另外,synchronized修饰方法,或者程序块。

修饰方法时,被修饰的对象为(this),整个方法体都在同步范围内。

修饰代码块时,必须要提供被同步的对象,并且不能为基本数据类型,但是volatile修饰的可以是基本数据类型。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值