4、线程安全的AtomicLong不需要synchronize
前言
Github:https://github.com/HealerJean
如果不上synchronize的情况
package com.hlj.thread.AtomicLong;
/**
* @Description
* @Author HealerJean
* @Date 2018/4/2 下午4:28.
*/
public class OriginMain {
public static void main(String[] args) {
for(int i=0;i<1000;i++){
Thread thread = new Thread(){
@Override
public void run() {
if(Counter.addOne() == 1000){
System.out.println("counter = 1000");
}
}
};
thread.start();
}
}
}
class Counter {
private static long counter = 0;
public static long addOne(){
return ++counter;
}
}
解释:
1、控制台上不一定每次都能出现 counter = 1000
2、在static上添加synchronize,则可以每次都能出现。
3、但是我们不想用synchronize,所以就出现了下面的内容
2、线程安全的AtomicLong
new初始为0
class Counter {
private static AtomicLong counter = new AtomicLong(0);
public static long addOne() {
return counter.incrementAndGet();
}
}