1. 程式人生 > 實用技巧 >多執行緒之停車場-Semaphore

多執行緒之停車場-Semaphore

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(); 釋放一個許可