是否保证在一个线程中对非易失性成员变量的分配可以在另一个线程中看到?

是否保证在一个线程中对非易失性成员变量的分配可以在另一个线程中看到?,第1张

是否保证在一个线程中对非易失性成员变量的分配可以在另一个线程中看到?

可以由另一个线程修改,但这不是保证。这也不是线程安全的。要使变量保证从另一个线程查看,您需要执行以下任一 *** 作

仅在以下情况下,才能保证一个线程对字段所做的更改仅对其他线程可见:

  • 写入线程释放同步锁,而读取线程随后获取该相同的同步锁。
  • 如果将一个字段声明为易失性字段,则在写入
    线程执行任何进一步的内存 *** 作之前,写入该线程的任何值都会被写入线程并使写入线程可见(即,出于
    手头的目的,将立即刷新该字段)。读取器线程必须
    在每次访问时重新加载volatile字段的值。


  • 线程第一次访问对象的字段时,它将看到该字段的初始值或自其他线程写入以来的值。
  • 线程终止时,所有写入的变量都将刷新到主内存。例如,如果一个线程使用Thread.join在另一个线程的终止上进行同步,则可以保证看到该
    线程产生的效果(请参见第4.3.2节)。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5430202.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存