0

在Java中,我需要一個對象,它是一個對象,其中包含60個LinkedBlockingQueue。在程序開始時,ArrayList將爲,同時仍然是單線程的。然後一個線程.add()LinkedBlockingQueue s,而另一個線程將.poll()。有沒有必要明確同步這個對象?同步BlockingQueues的ArrayList

回答

4

不可以,如果列表在初始化後沒有被修改,那麼你不需要同步它。我建議你使用UnmodifiableList而不是ArrayList - 如果有人試圖在初始化後修改列表,你會得到一個運行時異常,這比擁有競爭條件更可取。

0

是否有任何需要顯式同步此對象?

如果用叉子叉線程後完成建設List那麼你的罰款。但是,如果它真的是不可變的,我會使用一個數組而不是一個集合。你可以這樣做:

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