current包下Semaphore的使用

使用場景:java

一個廁全部5個坑位,每來一我的都要佔一個坑位,當5我的都佔完了,後面的人只能等待。每當有一我的吃完飯,等待的其中一人就能夠繼續進入空的坑位。其餘人繼續等待。ui

Demo:code

public static void main(String[] args) {
    final Semaphore semaphore = new Semaphore(2);
    for (int i = 0; i < 5; i++) {
        new Thread(new Runnable() {
            public void run() {
                try {
                    semaphore.acquire();
                    System.out.println(Thread.currentThread().getName() + "  開始蹲坑....");
                    TimeUnit.SECONDS.sleep(5);
                    System.out.println(Thread.currentThread().getName() + "  蹲坑結束...");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    semaphore.release();
                }
            }
        }).start();
    }
}

程序執行結果:
get

Thread-1  開始蹲坑....
Thread-0  開始蹲坑....
Thread-1  蹲坑結束...
Thread-0  蹲坑結束...
Thread-3  開始蹲坑....
Thread-2  開始蹲坑....
Thread-2  蹲坑結束...
Thread-3  蹲坑結束...
Thread-4  開始蹲坑....
Thread-4  蹲坑結束...
相關文章
相關標籤/搜索