Java中的所有队列都是线程安全的吗?

时间:2012-12-23 15:40:52

标签: java concurrency thread-safety queue

在Java中存在许多队列实现,如LinkedList,BlockingQueues。它们都是线程安全的吗?如果您的答案是否定,哪些实现支持并发访问,哪些实现了最佳性能?

注意:我正在使用JDK 1.6。

2 个答案:

答案 0 :(得分:8)

大多数标准集合都不是线程安全的。您在阅读API文档时可以找到此信息。

例如LinkedList的文档:

  

如果多个线程同时访问链表,并且至少有一个线程在结构上修改了列表,则必须在外部进行同步

对于从多个线程访问的集合,您应该查看java.util.concurrent

答案 1 :(得分:7)

没有。例如,LinkedList不是线程安全的。

java.util.concurrent包中的那些是线程安全的。

最佳表现取决于您对它们的处理方式。并且您不会根据其性能选择实现,而是根据队列的行为方式以及您需要对队列执行的操作来选择实现。例如,SynchronousQueueLinkedListArrayBlockingQueue的行为完全不同。