【问题标题】:Making a non-thread safe queue thread safe使非线程安全队列线程安全
【发布时间】:2014-06-25 11:34:35
【问题描述】:

假设我有一个不是线程安全的队列实现。如何使其线程安全(不修改原始代码)?换句话说:

如何编写由常规非线程安全队列支持的 SynchronizedQueueWrapper?

另外:我的队列除了add、remove、peek和size函数外没有实现Collection接口。

【问题讨论】:

    标签: java thread-safety queue


    【解决方案1】:

    如果您的队列实现了Collection,您可以简单地使用Collections.synchronizedCollection(queue);。否则我建议你检查the code of synchronizedCollection 并做类似的事情(本质上是:通过this 上的互斥锁来保护队列上的所有操作)。

    请注意,它仍然需要用户正确访问同步队列,例如在迭代期间。

    【讨论】:

    • 请问,为什么需要同步add()方法?
    • @user1186523 所有方法都需要同步 - 如果同时添加两个线程,可能会破坏非线程安全集合。类似地,如果一个线程添加而另一个线程稍后读取,而不同步 add 方法,第二个线程可能看不到添加(陈旧数据)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2018-08-15
    • 2012-11-05
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多