多线程三要素

多线程的三要素
    原子性
        所有的操作要么成功,要么失败,不能中间中止
     可见性
        对于共享变量,有一个线程修改了其值,其他线程也能看到,使用的也是最新的值
     有序性
        代码按照顺序执行(只要求最终一致性)(不影响单线程的最终一致性,但会影响多线程的一致性)
        {
        int i=0;
        boolean b=false;
        i=1;
        b=true;
        }

        {
        int i=0;
         i=1;
        boolean b=false;
        b=true;
        }
        两个代码执行的结果是一样的,因此可能会重排序

        Thread1---
        obj=createObj();
        init =true;

        Thread2----
        while(!init){
        sleep(1000);
        }
        useObj()

        Thread1由于指令重排,先init再createObj()时,当T和read1执行到init=true;Thread2获取到cpu执行权,while通过,调用userObj就会出现空指针异常

猜你喜欢

转载自www.cnblogs.com/draymond/p/12331278.html