串行线程限制

时间:2015-02-21 19:15:08

标签: java multithreading thread-safety

我正在尝试在java中实现串行线程限制。我在Thread A的run方法中创建了一个可变对象的引用。现在我想把对象交给线程B,使得只有线程B与对象互相排斥,并且看到对A做出的对象的修改(我可以通过安全地发布它来确保),但是如何我可以保证只有线程B可以访问该对象而没有其他线程吗?本书说可以使用Blocking Queue完成更多工作。任何人都可以帮助我实现此功能

2 个答案:

答案 0 :(得分:1)

您可以使用两个线程之间共享的Exchanger。一个线程(线程B)将发送null,而其他线程(线程A)将发送所需的对象。因此,线程A将安全地将对象发布到线程B。

答案 1 :(得分:1)

您可以让线程A将对象放在BlockingQueue上,线程B将其取下。在这种情况下,SynchronousQueue - 没有内部容量来存储对象 - 将是一个很好的候选者,因为你只需要交换一个对象。这比Exchanger稍微容易一些,因为您只需要在一个方向上交换对象。它的Javadoc甚至提到"交换器可能被视为SynchronousQueue的双向形式"。