栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java线程之间共享静态变量吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java线程之间共享静态变量吗?

对于可见性,静态变量没有什么特别的。如果可以访问它们,那么任何线程都可以使用它们,因此您更可能看到并发问题,因为它们更容易暴露。

JVM的内存模型强加了可见性问题。这是一篇有关内存模型以及线程如何看到写入的文章。您不能指望一个线程能够及时对其他线程可见的更改(实际上,JVM没有义务在任何时间范围内完全对您可见这些更改),除非您建立事前发生的关系。

这是该链接的引文(Jed Wesley-Smith的评论中提供):

Java语言规范的第17章定义了内存操作(例如共享变量的读写)上的事前发生关系。只有在写入操作发生之前(在读取操作之前),才能保证一个线程的写入结果对另一线程的读取可见。同步和易失的构造,以及Thread.start()和Thread.join()方法,可以形成事前关联。尤其是:

  • 线程中的每个动作都会发生-在该线程中的每个动作之前,该顺序按程序顺序出现。

  • 监视器的解锁(同步块或方法退出)发生在同一监视器的每个后续锁定(同步块或方法入口)之前。并且由于事前发生关系是可传递的,因此在解锁之前,线程的所有操作都发生在监视该线程的所有线程之后的所有操作之前。

  • 在每次后续读取同一字段之前,都会对易失字段进行写操作。易失性字段的写入和读取与进入和退出监视器具有相似的内存一致性效果,但不要求互斥锁定。

  • 在启动线程中的任何操作之前,都会发生对启动线程的调用。

  • 线程中的所有操作都会发生-在任何其他线程从该线程上的联接成功返回之前。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/470580.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号