Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使非线程安全队列线程安全_Java_Thread Safety_Queue - Fatal编程技术网

Java 使非线程安全队列线程安全

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

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

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


另外:除了添加、删除、查看和大小功能之外,我的队列没有实现收集接口。

如果您的队列实现了
收集
,您只需使用
收集。synchronizedCollection(队列)。否则,我建议您检查并执行类似操作(本质上是:通过
this
上的互斥来保护队列上的所有操作)


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

我可以问一下,为什么需要同步add()方法?@user1186523所有方法都需要同步-如果您有两个线程同时添加,则可能损坏非线程安全集合。类似地,如果一个线程添加,另一个线程稍后读取,而没有同步
add
方法,则第二个线程可能看不到添加(过时数据)。