Semaphore使用,占桌把戏
计数信号量。从概念上讲,一个信号量维护一组许可。如果有必要,每个人都需要获得区块,直到获得许可证,然后获得许可证。每次发布都会增加一个许可,可能会释放一个阻塞的收购方。然而,没有使用实际的许可对象;信号量只是保持一个可用数字的计数,并采取相应的行动。信号量通常用于限制线程的数量,而不能访问某些(物理或逻辑)资源。
例如,下面是一个类,它使用信号量来控制对一个占桌
public static void main(String[] args) throws InterruptedException {
//是否是公平
Semaphore semaphore = new Semaphore(3, true);
for (int i = 0; i < 6; i++) {
int temp = i;
new Thread(() -> {
try {
//获取
semaphore.acquire();
System.out.println(temp + "号车抢到桌位");
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
//释放
semaphore.release();
System.out.println(temp + "号车离开桌位");
}
}).start();
}
}
运行结果:
2号车抢到桌位
1号车抢到桌位
0号车抢到桌位
0号车离开桌位
1号车离开桌位
5号车抢到桌位
4号车抢到桌位
2号车离开桌位
3号车抢到桌位
4号车离开桌位
3号车离开桌位
5号车离开桌位