volatile关键字增加了实例变量在多个线程之间的可见性,但是不具备原子性。
package com.wkcto.volatilekw;
/**
 * volatile不是具备原子性
 * Author: 老崔
 */
public class Test03 {
    public static void main(String[] args) {
        //在main线程中创建10个子线程
        for (int i = 0; i < 100; i++) {
            new MyThread().start();
        }
    }
    static class MyThread extends Thread{
        //volatile关键仅仅是表示所有线程从主内存读取count变量的值
        public static  int count;
      /*  //这段代码运行后不是线程安全的,想要线程安全,需要使用synchronized进行同步,如果使用synchronized同时,也就不需要volatile关键了  
      public static void addCount(){
            for (int i = 0; i < 1000; i++) {
                //count++不是原子操作
                count++;
            }
            System.out.println(Thread.currentThread().getName() + " count=" + count);
        }*/
        public synchronized static void addCount(){
            for (int i = 0; i < 1000; i++) {
                //count++不是原子操作
                count++;
            }
            System.out.println(Thread.currentThread().getName() + " count=" + count);
        }
        @Override
        public void run() {
            addCount();
        }
    }
}