象牙塔的案例和资讯已经很多年没有更新了,实在没有精力更新,需要最新案例请联系客服!
--- 我们没有销售只有技术,不善于也不需要宣传,服务好已有客户足以!---
Java内存模型与线程
编辑:象牙塔 技术部  |  点击率:2023次

   内存模型:说了这么多的内存模型,到底什么是内存模型呢?特定的操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象。

1429080380361897.jpg

  它的作用是定义程序中各个共享的变量的访问规则,即如何将变量写入内存和从内存中取出变量。Java内存模型有主内存与工作内存之分,所有变量存在主内存中,线程则是拥有自己的工作内存,它是主内存的副本拷贝,线程只能读写工作内存。
  8种原子操作
  ·lock(锁定):作用于主内存的变量,它把一个变量标识为一条线程独占的状态。
   unlock(解锁):作用于主内存的变量,它把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。
   read(读取):作用于主内存的变量,它把一个变量的值从主内存传输到线程的工作内存中,以便随后的 load 动作使用。
   load(载入):作用于工作内存的变量,它把 read 操作从主内存中得到的变量值放入工作内存的变量副本中。
   use(使用):作用于工作内存的变量,它把工作内存中一个变量的值传递给执行引擎,每当虚拟机遇到一个需要使用到变量的值的字节码指令时将会执行这个操作。
  ·assign(赋值):作用于工作内存的变量,它把一个从执行引擎接收到的值赋给工作内存的变量,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。
   store(存储):作用于工作内存的变量,它把工作内存中一个变量的值传送到主内存中,以便随后的 write 操作使用。
   write(写入):作用于主内存的变量,它把 store 操作从工作内存中得到的变量的值放入主内存的变量中。
  volatile变量的特殊规则
  volatile的特性是保证此变量对所有线程的可见性,即当变量的值修改后,其他线程可以立即知道发生的变化。普通变量则是修改完值后,需要写回主内存,然后其他线程再从主内存读取该数据。volatile还可以通过内存屏障来禁止指令的重排序。综合来讲它的读操作和普通变量差不多,写操作慢一点。
  long和double变量的特殊规则
       8种操作一般都是原子性的,但是对于64位的数据,内存模型允许将没有被volatile修饰的64位数据的读写操作划分为两次32位的操作进行---->非原子协定但一般我们不需要将long和double声明为volatile。
       以上就是小编的分享,各位可以在下面留言交流。
  •   上一篇: Java 虚拟机总结给面试的你
  •   下一篇: 虚拟主机与VPS主机对比分析