多執行緒之停車場-Semaphore
阿新 • • 發佈:2020-11-30
Semaphore:停車場
容量是固定的,出一個執行緒,近一個執行緒.
程式碼如下:
/** * @author jeremy.li * @date 2020/11/30 * @description 停車場 */ public class SemaphoreTest implements Runnable { static Semaphore semaphore = new Semaphore(5); public static void main(String[] args) throws InterruptedException { for (int i = 0; i < 20; i++) { SemaphoreTest semaphoreTest = new SemaphoreTest(); Thread thread = new Thread(semaphoreTest, i + " 號司機"); thread.start(); } } @Override public void run() { try { semaphore.acquire(); Thread.sleep(2000); System.out.println(Thread.currentThread().getName() + ",搶到了車位"); semaphore.release(); } catch (InterruptedException e) { e.printStackTrace(); } } }
關鍵方法: acquire(); 從訊號量獲取一個許可,如果無可用許可前將一直阻塞等待, release(); 釋放一個許可