據我所知,鏈表和數組可以無限增長或我錯了嗎?但是,當我通過documentation in the Executor Service我看到這個:爲什麼ArrayBlockingQueue被稱爲有界隊列而LinkedBlockingQueue被稱爲無界阻塞隊列?
無界隊列。如果所有corePoolSize線程都忙,則使用無界隊列(例如 LinkedBlockingQueue沒有預定義容量)將導致新的 任務在隊列中等待。 因此,不會創建corePoolSize線程。 (和maximumPoolSize的 價值,因此沒有任何影響。)
如此做Unbounded Queue
屬性變化的時候,LinkedBlockingQueue
有一個定義的能力呢?
而這種書面ArrayBlockingQueue
:
界隊列。有限隊列(例如,ArrayBlockingQueue) 有助於防止與有限的最大池尺寸一起使用時的資源耗盡,但可能更難以調整和控制。隊列 大小和最大池大小可以彼此交換:使用大隊列和小池可最大限度地減少CPU使用率,OS資源和上下文切換開銷,但會導致人爲地降低吞吐量。如果任務頻繁阻塞(例如,如果它們是I/O ),則系統可能會計劃時間以獲得比您允許的更多的線程數量的 。使用小隊列通常需要更大的池大小,這會使CPU更繁忙,但可能會遇到不可接受的調度開銷,這也會降低吞吐量。
@Andrej是我混淆ArrayList Array。謝謝澄清。順便說一句,當ArrayList由不能增長的底層數組支持時,ArrayList是如何增長的? – Geek 2012-08-06 14:54:59
當需要調整大小時,ArrayList會分配一個新的更大的數組,並將所有元素複製到該新數組中。 – 2012-08-06 14:59:09