2019独角兽企业重金招聘Python工程师标准>>>
使用场景:
一个厕所有5个坑位,每来一个人都要占一个坑位,当5个人都占完了,后面的人只能等待。每当有一个人吃完饭,等待的其中一人就可以继续进入空的坑位。其他人继续等待。
Demo:
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();}
}
程序执行结果:
Thread-1 开始蹲坑....
Thread-0 开始蹲坑....
Thread-1 蹲坑结束...
Thread-0 蹲坑结束...
Thread-3 开始蹲坑....
Thread-2 开始蹲坑....
Thread-2 蹲坑结束...
Thread-3 蹲坑结束...
Thread-4 开始蹲坑....
Thread-4 蹲坑结束...