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

一.何时用volatile

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

二.原子操做

若是须要原子性的更新操做,可使用AtomicInteger,AtomicLong等特殊的原子性变量类。只有在特殊状况下会用到这种类库,经常使用的就是计数了。一般使用锁会更安全一些,要么是synchronized,要么是Lock对象安全

三.临界区(同步块)

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

synchronized(syncObject){性能

//synchronized code优化

}spa

在进入同步块代码以前必须得到同步对象的锁,不然须要在等待锁释放以后得到锁才能够进入同步块代码。线程

使用同步块的好处是,可使多我的问访问对象的时间性能获得显著提升。code

//TODO demo对象

相关文章
相关标签/搜索