如果隊列已滿,ArrayBlockingQueue將阻塞生產者線程,並且如果隊列爲空,它將阻塞使用者線程。阻塞隊列是否失敗了多線程的目的
這種阻塞的概念是否違背了多線程的思想?如果我有一個「主」線程,並讓我們說我想將所有「日誌記錄」活動委託給另一個線程。所以基本上在我的主線程中,我創建了一個Runnable來記錄輸出,並將Runnable放在ArrayBlockingQueue上。這樣做的全部目的是讓'主'線程立即返回,而不會在昂貴的日誌記錄操作中浪費任何時間。
但是,如果隊列已滿,則主線程將被阻塞,並將等待一個點可用。那它對我們有什麼幫助?
線程爭用,線程匱乏和不安全的併發訪問都是多線程時必須解決的所有問題。線程對共享資源不會很好,除非明確告訴。 – Makoto
你只考慮隊列已滿的情況。在其他情況下,線程不會阻塞。 –
@Makoto你在做什麼?這與這個問題無關。順便說一句,BlockingQueues的線程安全...請參閱http://docs.oracle.com/javase/6/docs/api/java/util/concurrent/BlockingQueue.html –