前言

Github:https://github.com/HealerJean

博客:http://blog.healerjean.com

如果不上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();
    }
}

WX20180402-165444

ContactAuthor