Java 使非线程安全队列线程安全
假设我有一个不是线程安全的队列实现。如何使其线程安全(无需修改原始代码)?换言之: 如何编写由常规非线程安全队列支持的SynchronizedQueueWrapperJava 使非线程安全队列线程安全,java,thread-safety,queue,Java,Thread Safety,Queue,假设我有一个不是线程安全的队列实现。如何使其线程安全(无需修改原始代码)?换言之: 如何编写由常规非线程安全队列支持的SynchronizedQueueWrapper 另外:除了添加、删除、查看和大小功能之外,我的队列没有实现收集接口。如果您的队列实现了收集,您只需使用收集。synchronizedCollection(队列)。否则,我建议您检查并执行类似操作(本质上是:通过this上的互斥来保护队列上的所有操作) 请注意,它仍然需要用户正确访问同步队列,例如在迭代期间。我可以问一下,为什么需要
另外:除了添加、删除、查看和大小功能之外,我的队列没有实现收集接口。如果您的队列实现了
收集
,您只需使用收集。synchronizedCollection(队列)代码>。否则,我建议您检查并执行类似操作(本质上是:通过this
上的互斥来保护队列上的所有操作)
请注意,它仍然需要用户正确访问同步队列,例如在迭代期间。我可以问一下,为什么需要同步add()方法?@user1186523所有方法都需要同步-如果您有两个线程同时添加,则可能损坏非线程安全集合。类似地,如果一个线程添加,另一个线程稍后读取,而没有同步add
方法,则第二个线程可能看不到添加(过时数据)。