Java虚拟机

Java内存模型与线程

2019-02-23  本文已影响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、死亡状态:线程销毁了。

上一篇下一篇

猜你喜欢

热点阅读