美文网首页
并发编程-简单了解

并发编程-简单了解

作者: 晏子小七 | 来源:发表于2017-08-30 14:06 被阅读5次

    1.三个问题:原子性问题,可见性问题,有序性问题

    原子性:要么全部执行,要么全部不执行

    可见性:当多线程访问同一个变量时,一个线程改变了这个变量的值,其他线程能够立即看得到修改的值

    //线程1执行的代码

    inti =0;

    i =10;

    //线程2执行的代码

    j = i;

    线程2执行 j = i,它会先去主存读取i的值并加载到CPU2的缓存当中,注意此时内存当中i的值还是0,那么就会使得j的值为0,而不是10.

    2.happens-before原则(先行发生原则):

    ——程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作

    ——锁定规则:一个unLock操作先行发生于后面对同一个锁额lock操作

    ——volatile变量规则:对一个变量的写操作先行发生于后面对这个变量的读操作

    ——传递规则:如果操作A先行发生于操作B,而操作B又先行发生于操作C,则可以得出操作A先行发生于操作C

    ——线程启动规则:Thread对象的start()方法先行发生于此线程的每个一个动作

    ——线程中断规则:对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生

    ——线程终结规则:线程中所有的操作都先行发生于线程的终止检测,我们可以通过Thread.join()方法结束、Thread.isAlive()的返回值手段检测到线程已经终止执行

    ——对象终结规则:一个对象的初始化完成先行发生于他的finalize()方法的开始

    3.volatile:(无法保证操作的原子性)一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

    1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。

    2)禁止进行指令重排序。

    相关文章

      网友评论

          本文标题:并发编程-简单了解

          本文链接:https://www.haomeiwen.com/subject/blwzdxtx.html