0

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

4

2 回答 2

4

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

于 2013-04-17T21:19:58.180 回答
0

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

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

BlockingQueue[] blockingQueueArray =
   blockingQueueList.toArray(new BlockingQueue[blockingQueueList.size()]);
于 2013-04-17T21:35:18.310 回答