# volatile、sychronized区别
volatile不保证原子性
package com.mrzhang.javalearn.bingfa.demo_04;
import java.util.concurrent.TimeUnit;
/**
* volatile基本使用(二)
* <p>
* 1. volatile虽然能保证读到的都是最新的,可是多个线程++后的值可能都是相同的,再同时写入就发生问题了
* 2. volatile只保证读,synchronized读写均保证
* 3. volatile效率相对于synchronized更高一些,并且volatile不阻塞
*
* @author 91MrZhang on 2020/8/1
*/
public class VolatileDemo02 {
private volatile Integer count = 0;
public void countIncrease() {
for (int i = 0; i < 5000; i++) {
count++;
}
String threadName = Thread.currentThread().getName();
System.out.println(threadName + "--->已经结束");
}
public static void main(String[] args) {
VolatileDemo02 vd02 = new VolatileDemo02();
for (int i = 0; i < 10; i++) {
new Thread(vd02::countIncrease, "线程" + i).start();
}
//主线程等待子线程结束的方式有很多,这里先最简单的sleep+线程打印判断
try {
TimeUnit.SECONDS.sleep(3);
} catch (InterruptedException e) {
e.printStackTrace();
}
//理论上count应该=5000*10,电脑性能越好,这个数值越低
System.out.println(vd02.count);
}
}