Volatile
多线程之间的可见性
但是,不具备同步性,也就是原子性
可以算是一个轻量级synchronized
性能比synchronized强很多,不会造成阻塞
在很多开源架构里
比如,netty的底层代码,就大量使用volatile
可见,netty性能一定非常不错
Volatile
用于只针对多个线程的可见性的变量操作
并不能,代表synchronize的同步功能
Atomic
实现原子性
可以使用atomic类的系列对象,支持原子性操作
Atomic类
只保证本身方法原子性,并不保证多次操作的原子性
保证多次操作的原子性,需要加synchronize
package com.bjsxt.base.sync007;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
public class AtomicUse {
private static AtomicInteger count = new AtomicInteger(0);
//多个addAndGet在一个方法内是非原子性的,需要加synchronized进行修饰,保证4个addAndGet整体原子性
/**synchronized*/
public synchronized int multiAdd(){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
count.addAndGet(1);
count.addAndGet(2);
count.addAndGet(3);
count.addAndGet(4); //+10
return count.get();
}
public static void main(String[] args) {
final AtomicUse au = new AtomicUse();
List<Thread> ts = new ArrayList<Thread>();
for (int i = 0; i < 100; i++) {
ts.add(new Thread(new Runnable() {
@Override
public void run() {
System.out.println(au.multiAdd());
}
}));
}
for(Thread t : ts){
t.start();
}
}
}
运行