原子性    

    1.一个操作是不可中断的,即使多个线程在一起执行的时候,一旦操作执行开始,就不会被其他的线程干扰执行并导致执行中断。    2.对于静态变量int ,2个线程同时对它进行修改,线程a对它修改为10,线程b对它修改为15,a、b线程之间是没有干扰的,最后的结果要么是10或者15。    3.非原子性操作时,都会存在线程安全问题,所以需要同步技术synchronized使操作变成原子性,一个操作是原子性操作,那么它就具有原子性。volatile    1.关键字虽然拥有多个线程之间的可见性,但是却不具有同步性(也就是原子性)。    2.轻量的(synchronized),性能要比(synchronized)强很多,不会造成线程阻塞(在很多开源的框架中,底层代码都是大量使用volatile)。    3.volatile用于针对多个线程的变量具有可见性,并不能代替synchronized同步功能。    

package demo1;import java.util.concurrent.atomic.AtomicInteger;/** * Created by liudan on 2017/7/2. */public class MyThread_volatile2  extends Thread{    private static volatile  int count;    /*AtomicInteger:使用步长一次性加10*/    private static void addCount(){        for (int i=0;i<1000;i++){            count++;        }        System.err.println(count);    }    @Override    public   void run() {        addCount();    }    public static  void main(String[] args){        MyThread_volatile2[] myThread_volatile2 = new MyThread_volatile2[10];        for (int i=0;i<myThread_volatile2.length;i++){            myThread_volatile2[i] = new MyThread_volatile2();        }        for (int i=0;i<10;i++){            myThread_volatile2[i].start();        }    }}输出:1000
2000
3000
4000
5309
6716
7716
5716
8716
9716

null