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

java – wait()期间的非易失性变量值和两个线程中的notifyall()

发布时间:2020-12-15 04:23:25 所属栏目:Java 来源:网络整理
导读:假设我有两个线程A和B,并且在这两个线程中我都有同步块,其中一个int变量被连续修改. 例如,线程A进入synchronized块修改int变量然后调用这两个方法: notifyall(); //to wake thread B which is in waiting state andwait(): 然后,线程B获得锁定并执行与线程A
假设我有两个线程A和B,并且在这两个线程中我都有同步块,其中一个int变量被连续修改.
例如,线程A进入synchronized块修改int变量然后调用这两个方法:

notifyall(); //to wake thread B which is in waiting state and
wait():

然后,线程B获得锁定并执行与线程A相同的步骤,并继续重复进程.对int变量的所有更改都发生在两个线程的synchronized块中.

我的问题是我需要使int变量volatile.在线程获取锁定因为notifyall()之前,线程在进入等待状态之前进行线程刷新并在寄存器中重新加载数据;呼叫.

解决方法

如果A和B交替运行而不是并发运行,并且如果它们通过对同一个Object的wait()和notifyAll()调用关闭,并且如果没有其他线程访问有问题的变量,那么线程安全性不要求变量是易挥发.

请注意,必须在o上同步的方法或块内调用o.wait()和o.notifyAll() – 同步足以确保两个线程在关闭之前看到所有彼此对任何变量的写入.

请注意确保两个线程在同一对象上同步,这在您的问题中是不明确的.如果两个线程正在等待并通知同一个类的不同实例,则根本没有有效的同步.

(编辑:李大同)

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

    推荐文章
      热点阅读