十二、java内存模型与线程

2020-01-07  本文已影响0人  楊大大大侠

一、内存间交互操作

        lock:作用于主内存中的变量

        unlock:作用于主内存中的变量

        read:作用于主内存中的变量

        load:作用于工作内存中的变量

        use:作用于工作内存中的变量

        assign:作用于工作内存中的变量

        store:作用于工作内存中的变量

        write:作用于主内存中的变量

二、volatile

       1、 可见性

                java里面的运算并非原子操作,导致volatile变量的运算在并发下一样是不安全的。

                不符合下列规则仍要加锁:

                        运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。

                        变量不需要与其他的状态变量共同参与不变约束。

        2、禁止指令重排序优化

三、原子性、可见性、有序性

    原子性:read、load、assign、use、store、write

    可见性:在变量修改后将新值同步回主内存,在变量读取主内存前刷新变量值,依赖主内存为传递媒介实现可见性、

    有序性:在本线程内观察,所有的操作都是有序的

四、先行发生原则

        程序次序规则:一个线程内

        管程锁定规则:一个unlock操作先行发送于后面同一个锁的lock操作

        volatile原则:

        线程启动规则:

        线程终止规则:

        线程中断规则:

        对象终结规则:

        传递性:

五、java与线程

       1、 线程的实现

                    使用内核线程实现

                    使用用户线程实现

                    使用用户线程加轻量级进程混合实现

        2、线程调度方式

                    协同式

                    抢占式

        3、线程状态转换

                

上一篇下一篇

猜你喜欢

热点阅读