volatile实现可见性,但是不能保持原子性,synchronized实现可见性和原子性,但是多线程下使用会降低效率,下面使用java并发包下的Atomic原子操作
public static void main(String[] args) {
AtomicInteger v1 =new AtomicInteger(0);
AtomicInteger v2 =new AtomicInteger(1);
AtomicMarkableReference stampedRef =new AtomicMarkableReference<>(v1, false);
// 定义线程实现接口
Runnable runnable =new Runnable(){
@Override
public void run() {
this.count(v1,v2,stampedRef);
}
// 执行方法
public void count(AtomicInteger v1, AtomicInteger v2, AtomicMarkableReference stampedRef ) {
//java多线程 操作共享变量 保证原子性
boolean flag = stampedRef.compareAndSet(v1, v2, false, true);
if(flag){
System.out.println(Thread.currentThread().getName()+"--update"+stampedRef.getReference());
}
}
};
// 启动10000个线程
for(int i=0;i<10000;i++) {
new Thread(runnable).start();
}
}
执行结果