美文网首页Java虚拟机
Java内存模型与线程

Java内存模型与线程

作者: 百花鱼藤 | 来源:发表于2019-02-23 11:11 被阅读0次

    一、Java内存模型
        Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。
       Java内存规定了所有的变量(Java实例变量,静态变量,字段等)都存在主内存中,每条线程都有自己的工作内存,线程的工作内存保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,然后再拷贝到主内存,不同的线程之间不能直接访问对方的工作内存中变量。
     1、内存交互
       内存交互需要经过
    read:主内存变量传输到工作内存
    load  :把主内存中得到的变量方法工作内存的变量副本中。
    use:把工作内存中的变量传递给执行引擎。
    assign:从执行引擎接收到的变量赋值给工作内存中的变量
    store:把变量值传递到主内存。
    write:把工作内存的变量放到主内存的变量中。
    所有指令都是原子性的。
     对于double,long类型的,可以不保证load store read 和write这四个操作的原子性。

    2、、Volatile
     Volatie的特点:1、对所有线程的可见性;2、静止指令重排序优化 (加入内存屏障)
       但不能保证并发线程中,对值的操作是安全的。

    3、可见性,原子性、有序性
      1、原子性:基本指令 load、read、use、assign、store、write。
      2、可见性:volatile,synchronized、final
     3、有序性:volatile,sysnchronized

    二、线程
     线程:分为内核线程、用户线程、用户线程加轻量级进程。
     1、线程调度:指系统为线程分配处理器使用权的过程。主要调度分为:协同式线程调度和抢占式线程调度。
    协同式线程调度:执行时间由自己控制,执行完成后,通知系统执行另外一个线程。
    抢占式线程调度:执行时间由操作系统来分配。
    2、线程的状态
       1、创建:创建未启动
       2、runnable:运行状态
       3、等待状态:wait方法。
       4、Blocking:阻塞状态。
       5、死亡状态:线程销毁了。

    相关文章

      网友评论

        本文标题:Java内存模型与线程

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