首页域名资讯 正文

Java内存模型与线程

2024-09-11 3 0条评论

Java内存模型与线程

  • 作者:新网
  • 来源:新网
  • 浏览:100
  • 2018-05-15 14:40:56

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

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

< div>  它的作用是定义程序中各个共享的变量的访问规则,即如何将变量写入内存和从内存中取出变量。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。        以上就是小编的分享,各位可以在下面留言交流。

文章版权及转载声明

本文作者:亿网 网址:https://edns.com/ask/post/149481.html 发布于 2024-09-11
文章转载或复制请以超链接形式并注明出处。