zoukankan      html  css  js  c++  java
  • 深入理解java虚拟机-第12章Java内存模型与线程

    第12章 Java内存模型与线程

    Java内存模型 

      主内存与工作内存:

        java内存模型规定了所有的变量都在主内存中,每条线程还有自己的工作内存。

        工作内存中保存了该线程使用的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行。

      内存间交互操作:

        1 lock 作用于主内存的变量,它把一个变量标识为一个线程独占的状态。

        2 unlock 作用于主内存的变量,把锁定的变量释放出来

        3 read 作用于工作内存的变量,把一个变量的值从主内存传输到线程的工作内存中。

        4 load 作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中

        5 use 作用于工作内存的变量 把工作内存中一个变量的值传递给执行引擎

        6 assign 作用于工作内存的变量, 把一个从执行引擎收到的值赋给工作内存的变量

        7 store 作用天工作内存的变量,把工作内存中一个变量的值传送到主内存中。

        8 write 作用于主内存的变量,把store操作从工作内存中得到的变量的值放入主内存中

      当一个变量定义为volatile后,它将具备两种特性

        1 保证此变量对所有线程的可见性,对于非原子性的操作,仍然不是线程安全的。

        2 禁止指令重排序优化。

      原子性、可见性与有序性

      先行先发原则

    Java线程的状态转换

      新建 New 创建后沿未启动的纯种处于这种状态

      运行 Runnable 包括了操作系统线程状态中的Running和Ready,处于此状态的线程有可能正在执行,也有可能正在等等着CPU为它分配执行时间

      无限期等待 Waiting 处于这种状态的线程不会被分配CPU执行时间,它们要等待被其它线程显式地唤醒:没有设置Timeout参数的Object.wait()方法;没有设置Timeout参数的Thread.join()方法;LockSupport.park()方法

      限期等待 Timed Waiting 处于这种状态的线程也不会被分配CPU执行时间,不过无须等待被期它线程显式地唤醒,在一定时间后它们会由系统自动唤醒: Thread.sleep()方法;设置了Timeout参数的Object.wait()方法;设置了Thimeout参数的Thread.join()方法;LockSupport.parkNanos()方法;LockSuport.parkUnitl()方法

      阻塞 Blocked 等待着获取到一个排他锁

      结束 Terminated 已终止线程的线程状态

  • 相关阅读:
    107. Binary Tree Level Order Traversal II
    108. Convert Sorted Array to Binary Search Tree
    111. Minimum Depth of Binary Tree
    49. Group Anagrams
    使用MALTAB标定实践记录
    442. Find All Duplicates in an Array
    522. Longest Uncommon Subsequence II
    354. Russian Doll Envelopes
    opencv 小任务3 灰度直方图
    opencv 小任务2 灰度
  • 原文地址:https://www.cnblogs.com/zyzl/p/4190037.html
Copyright © 2011-2022 走看看