【问题标题】:Serial Thread Confinement串行线程限制
【发布时间】:2015-02-21 19:15:07
【问题描述】:

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

【问题讨论】:

    标签: java multithreading thread-safety


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2011-02-17
        • 1970-01-01
        • 1970-01-01
        • 2011-09-09
        • 2017-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多