java,semaphore
<link rel="stylesheet" href="https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c9715bcbac9/4c8b2fbfaddf.css" type="text/css" /><link rel="stylesheet" href="https://js.how234.com/559000b9bd/4c9a02a4bec20fc1fc2f0e60a2782b5ffb/4c9715bcbac9/4c8b38b8bad702ecfe21037ca964.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><style>pre{overflow-x: auto}</style>
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
java semaphore是什麼?讓我們一起來了解一下吧!
java semaphore是java程序中的一種鎖機制,叫做信號量。它的作用是操縱並且訪問特定資源的線程數量,允許規定數量的多個線程同時擁有一個信號量。
相關的方法有以下幾個:
1.void acquire() :從信號量獲取一個允許,若是無可用許可前將會一直阻塞等待
2. boolean tryAcquire():從信號量嘗試獲取一個許可,如果無可用許可,直接返回false,不會阻塞
3. boolean tryAcquire(int permits, long timeout, TimeUnit unit):
在指定的時間內嘗試從信號量中獲取許可,如果在指定的時間內獲取成功,返回true,否則返回false
4.int availablePermits(): 獲取當前信號量可用的許可
semaphore構造函數:
public Semaphore(int permits) { sync = new NonfairSync(permits); } public Semaphore(int permits, boolean fair) { sync = fair ? new FairSync(permits) : new NonfairSync(permits); }
實戰舉例,具體步驟如下:
public static void main(String[] args) { //允許最大的登錄數 int slots=10; ExecutorService executorService = Executors.newFixedThreadPool(slots); LoginQueueUsingSemaphore loginQueue = new LoginQueueUsingSemaphore(slots); //線程池模擬登錄 for (int i = 1; i { if (loginQueue.tryLogin()){ System.out.println("用戶:"+num+"登錄成功!"); }else { System.out.println("用戶:"+num+"登錄失敗!"); } }); } executorService.shutdown(); System.out.println("當前可用許可證數:"+loginQueue.availableSlots()); //此時已經登錄了10個用戶,再次登錄的時候會返回false if (loginQueue.tryLogin()){ System.out.println("登錄成功!"); }else { System.out.println("系統登錄用戶已滿,登錄失敗!"); } //有用戶退出登錄 loginQueue.logout(); //再次登錄 if (loginQueue.tryLogin()){ System.out.println("登錄成功!"); }else { System.out.println("系統登錄用戶已滿,登錄失敗!"); }
}class LoginQueueUsingSemaphore{ private Semaphore semaphore; /** * * @param slotLimit */ public LoginQueueUsingSemaphore(int slotLimit){ semaphore=new Semaphore(slotLimit); } boolean tryLogin() { //獲取一個憑證 return semaphore.tryAcquire(); } void logout() { semaphore.release(); } int availableSlots() { return semaphore.availablePermits(); }}
-
學習機什麼牌子好
1、步步高學習機;“步步高點讀機!哪裏不會點哪裏!”。這句廣告可以說是現象級的了。步步高不只是口號喊的響亮,作爲老牌大廠,步步高的學習機確實很優異。步步高學習機是寓教於樂的教學方式。通過興趣,來進行教育。學習知識,獲得金幣。金幣可以飼養學習機中的電子寵物...
-
微博怎麼顯示手機型號,微博如何顯示手機型號
微博怎麼顯示手機型號:1、首先需要點擊手機桌面中的微博。2、然後再點擊屏幕右下方的我的。3、然後再點擊屏幕上方的設置圖標。4、然後再點擊會員專屬設置。5、然後再點擊微博來源。6、最後選擇想要顯示的手機型號就可以了。...
-
微博如何移動好友分組
1、進入個人微博,點擊主頁裏的“關注”。或者從首頁裏邊的“關注”進入也是可以的。2、進入關注列表後自動顯示爲查看其他分組,這個時候你可以看到“批量管理”和“排序”兩個選項,你可以進行初步排序管理。3、單擊“查看其他分組”,裏面有你微博裏所有的分組,我們...
-
微博怎麼取消超話關注
1、打開微博,依次點擊發現、超話、超話排行,然後進入超話社區。2、點擊右下角“我的”,進入到個人中心,再點擊關注界面。3、選擇想要取消關注的超話,接着點擊進入。4、點擊左下角的已關注,再點擊確定,即可取消超話的關注。...