synchronized和lock锁(二)—volatile关键字

一.什么时候用volatile

基本上,如果一个域可能被多个任务同时访问,并且这些任务中至少有一个是写入任务,那么就应该将这个域设置为volatile的。如果你将一个域定义为volatile的,那么它就会告诉编译器不要执行任何移除读取和写入操作的优化,这些操作的目的是用线程中的局部变量维护对这个域的精确同步。针对volatile关键字修饰的域,读取和写入都是直接针对内存的,并没有被缓存。但是,volatile并不能对递增进行原子操作。

二.原子操作

如果需要原子性的更新操作,可以使用AtomicInteger,AtomicLong等特殊的原子性变量类。只有在特殊情况下会用到这种类库,常用的就是计数了。通常使用锁会更安全一些,要么是synchronized,要么是Lock对象

三.临界区(同步块)

针对防止多线程同时访问方法内部的部分代码而不是整个方法时会用到同步块。这种分离的方式被称为临界区。使用synchronized锁住一个对象,此对象的锁用来对花括号内的代码进行同步控制。

synchronized(syncObject){

//synchronized code

}

在进入同步块代码之前必须获得同步对象的锁,否则需要在等待锁释放之后获得锁才可以进入同步块代码。

使用同步块的好处是,可以使多个人问访问对象的时间性能得到显著提高。

//TODO demo

转载于:https://my.oschina.net/u/1271447/blog/3006877

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值