串行线程限制

Serial Thread Confinement

我正在尝试在 java 中实现串行线程限制。我在线程 A 的 运行 方法中创建了一个可变对象的引用。现在我想以只有线程 B 与对象互斥的方式将对象移交给线程 B,并看到 A 对对象所做的修改(我可以通过安全发布来确保这一点),但是如何我可以确保只有线程 B 可以访问该对象而 none 其他线程可以访问该对象吗?书上说使用阻塞队列可以更轻松地完成。任何人都可以帮助我实现此功能

您可以使用 Exchanger 在两个线程之间共享。一个线程(线程 B)将发送 null,另一个线程(线程 A)将发送所需的对象。所以线程A会安全地将对象发布给线程B。

你可以让线程A把对象放到BlockingQueue上,线程B取下来。在这种情况下,SynchronousQueue——它没有内部存储对象的能力——将是一个很好的选择,因为你只需要交换一个对象。这比 Exchanger 稍微容易一些,因为您只需要在一个方向上交换一个对象。 Javadoc 甚至提到 "An Exchanger may be viewed as a bidirectional form of a SynchronousQueue".