同步BlockingQueues的ArrayList

时间:2013-04-17 21:16:29

标签: java multithreading arraylist synchronization blockingqueue

在Java中,我需要一个ArrayList为60 LinkedBlockingQueue的对象。程序开头的ArrayList.add() 60 LinkedBlockingQueue,同时仍为单线程。然后一个线程将.add()传递给LinkedBlockingQueue,而另一个线程将.poll()。是否需要显式同步此对象?

2 个答案:

答案 0 :(得分:4)

不,如果在初始化后没有修改列表,那么您不需要同步它。我建议您使用UnmodifiableList而不是ArrayList - 如果有人在初始化后尝试修改列表,您将获得运行时异常,这比竞争条件更好。

答案 1 :(得分:0)

  

是否需要显式同步此对象?

如果你在后分叉你完成了List的构建,那么你很好。但是,如果它真的是不可变的,我会使用数组而不是Collection。你可以这样做:

BlockingQueue[] blockingQueueArray =
   blockingQueueList.toArray(new BlockingQueue[blockingQueueList.size()]);