我對Java中信號量的概念並不十分清楚,並試圖理解它。Java中的信號量和線程池
我的理解是在閱讀oracle docs(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Semaphore.html)和其他一些頁面之後,其類似於a鎖定許可證數量。
它通常用於創建資源池。 在這裏我感到困惑,也有ThreadPoolExecutor,它可以給我一個線程池。那麼區別是什麼呢?在哪種情況下使用哪一個?
我對Java中信號量的概念並不十分清楚,並試圖理解它。Java中的信號量和線程池
我的理解是在閱讀oracle docs(http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/Semaphore.html)和其他一些頁面之後,其類似於a鎖定許可證數量。
它通常用於創建資源池。 在這裏我感到困惑,也有ThreadPoolExecutor,它可以給我一個線程池。那麼區別是什麼呢?在哪種情況下使用哪一個?
ThreadPool是一個可以共同管理的多個線程池中的一個。在Java中ThreadPoolExecutor在爲Runnable或Callable執行時也有一個隊列,它可以返回一個Future,它允許您控制任務或獲取結果。
信號量只允許你獲得許多許可證,例如它最多可以允許兩個線程運行一些代碼。你需要運行一些線程才能達到目的,否則它們是不相關的。
順便說一句:我會閱讀Java 7的文檔,因爲Java 5.0已經停用了一段時間,Java 6幾乎在免費服務結束。
首先,有沒有這樣的事情愚蠢的問題...
Semaphore允許多個線程「獲取」的資源。他們應該檢查資源是否可用。它就像一個流量控制閥。
A Lock是爲獨家訪問。一次只有一個線程。
A ThreadPoolExecutor允許您使用有限的線程數運行一些代碼(Runnable或Callable類)。您不必費心自己構建它,它已經在JSE API中爲您實施。你可以用一些信號量和隊列來做你自己的事情......但是如果你沒有很好的理由,不要浪費你的時間。
想象你必須實現一個Web服務器,它接收到一些端口80的請求。你不想用同一個線程來監聽這個端口來處理整個請求(這是浪費資源......) 。您可以使用ThreadPoolExecutor處理請求,處理它並響應客戶端。 ThreadPoolExecutor可以配置爲利用當前的CPU:針對此架構和此任務的最佳威脅數量。
Concurrency in practice是一本不錯的書,可以提高您對此事的認識。
我希望這可以幫助你,並對我的基礎英語感到抱歉。
感謝您指出Java 7文檔。我剛剛搜索並打開鏈接。 – mehta
谷歌是有點過時的鏈接。它經常給你1.4.2。 –
谷歌搜索:「Java 7 XXX」與XXX =該類的名稱99%的時間工作。例如:[搜索Java 7 Semaphore](https://www.google.co.uk/search?q=java+7+semaphore)。 – assylias