加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如果多个线程可以访问某个字段,那么它应该标记为volatil

发布时间:2020-12-14 05:47:35 所属栏目:Java 来源:网络整理
导读:阅读几个主题( common concurrency problems,volatile keyword,memory model)我对Java中的并发问题感到困惑. 我有很多字段可以被多个线程访问.我是否应该通过它们并将它们标记为易变? 在构建一个类时,我不知道多个线程是否会访问它,所以让任何字段都不易变
阅读几个主题( common concurrency problems,volatile keyword,memory model)我对Java中的并发问题感到困惑.

我有很多字段可以被多个线程访问.我是否应该通过它们并将它们标记为易变?

在构建一个类时,我不知道多个线程是否会访问它,所以让任何字段都不易变化是不安全的,所以根据我的理解,你很少会使用它.它是否正确?

对我来说,这是特定于版本1.5 JVM及更高版本,但不仅限于回答我的具体设置.

解决方法

如果一个字段由多个线程访问,则它应该是volatile或final,或者仅使用synchronized块访问.否则,其他线程可能看不到指定的值.

必须专门为多线程的并发访问设计类.简单地标记易失性或最终的字段对于线程安全是不够的.存在一致性问题(多个字段的更改的原子性),关于线程间信令的关注(例如,使用等待和通知)等.

因此,最安全的做法是假设一个对象应该只对单个线程可见,除非另有说明.使所有对象都是线程安全的并不是必需的,并且在软件速度方面成本很高,但更重要的是,在开发费用方面.

相反,软件的设计应使并发线程尽可能少地相互交互,最好不要.需要清楚地识别它们进行交互的点,以便可以设计适当的并发控制.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读