首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java线程从其他线程读取的值

Java线程从其他线程读取的值
EN

Stack Overflow用户
提问于 2015-07-01 16:10:22
回答 1查看 77关注 0票数 2

我有一个日志线程和一个主应用线程。

主应用程序每50ms运行一次,通常的滴答长度为11ms,可以完成它需要做的所有事情。这个11ms或无论滴答持续多久,都会记录在公共字段的主应用程序中的一个变量中。

在我的日志线程中,我想监控一个变量,该变量跟踪主应用线程中的平均计时长度,以便知道何时应该限制日志,因为主应用流始终具有高于日志的优先级。它是主应用程序中的一个公共变量,不幸的是,我无法控制主应用程序的设计,也不能使其成为“线程安全”变量。

然而,我只想读它,而不想写它。

我是否可以安全地直接读取变量(如果数据在几微秒内不同步或我在数据上运行缓慢,这并不重要),或者我是否应该创建一个线程安全的方法,为我读取变量并通过反射将其注入到主应用程序中?

我应该注意哪些可能的问题?最好的方法是什么?

这个问题的目的是了解在这个场景中可能出现的所有问题,以及我应该注意的问题。我对补丁代码解决方案不感兴趣,但更感兴趣的是了解线程的行为和线程之间的变量,以及可能存在的陷阱。

EN

回答 1

Stack Overflow用户

发布于 2015-07-01 16:35:59

您不能假设一个线程的变量视图与另一个线程的视图相同。

在一般情况下,系统将缓存变量,但此缓存将经常刷新到核心内存,以便您可以看到它几乎总是最新的。然而,这是一个危险的假设,因为没有承诺在JVM中实现该功能。

尝试从不同的线程读取值是完全有可能的,而永远不会看到它的变化。

对于跨平台和Java版本弹性的可靠解决方案,您应该找到一种不同的方式来获取价值-您关于通过反射进行注入的想法可能是可行的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31155908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档