我想以线程安全的方式在使用任意对象的两个线程之间建立一个简单的“协议”,而不是专门针对多线程。协议应该是只有一个线程拥有对象,并且只有所有者可以读/写对象。我在这里阅读了有关发生之前 的信息,但不太确定讨论是否仅涉及单个字段或整个对象。以下两种解决方案对于“所有权协议”是否正确?
1) 使用 BlockingQueue 以便将对象通过队列传递给另一个线程。
2)“任意对象”不再那么随意了,因为我引入了一个
volatile boolean ownedByThreadA;
最初,线程 A 正在使用该对象ownedByThreadA
。true
完成后,线程 Afalse
写入ownedByThreadA
. 线程 B 轮询与此类似的变量
while (data.ownedByThreadA) {
doOtherThings();
}
dealWith(data);
我很确定(1)是一个正确的解决方案。对于(2),我不太确定。特别是对于(2),我想知道是否只有一个volatile
就足以获得正确的解决方案,因为遵守了“用户协议”。