当前位置: 首页 > 网络应用技术

挥发性和JMM多线程内存模型

时间:2023-03-06 23:32:43 网络应用技术

  在开始解释Java多线程缓存模型之前睡眠睡眠2秒钟,线程2执行。两个线程使用false的初始值使用共享变量共享Flag。如果ShareFlag始终等于false,则线程1始终处于死周期中,因此我们将共享Flag设置为在线程2中为true。

  如果您尚未了解JMM线程模型,则可能已经阅读了上面的代码,并且要获得的输出结果如下:

  如下图所示,普通人理解此代码,首先执行线程1进入周期,线程2修改shareflag = true,而线程1跳出周期。因此,从周期跳出的线程1将打印“螺纹1执行=>”,但是在作者的实验之后,“线程1”执行=>“不会打印,线程1没有跳出死周期。为什么?

  为了解释上述问题,我们需要学习JMM(Java内存模型)Java内存模型。作者认为它被称为Java多线程内存模型。

  根据上述实验和JMM模型,无法感知由线程2修改的共享变量的值。因此,线程1的值如何感知共享变量的值?实际上,它也很简单。要共享ShareFlag的变量,请添加波动性关键字。

  底部原理就是这样,加上挥发性关键字提示JMM遵循MESI缓存一致性协议。该协议包含以下缓存使用规格(如果您不了解,则无法查看。以下将以简单的语言和示例描述)。

  上述缓存的代码可能太复杂了。简而言之,这是

  推荐阅读“并行编程列”

  本文复制来源(必须连接,您不仅要切换到文本):Letters Brother Blog- Zimug.com

  原始:https://juejin.cn/post/7096630335651184647