一、Semaphore(信号量)
注解:信号量,其实就是定义一定的数量,只有释放一个才能进去下一个,其余都得进入等待状态。比如有2个洗手间,有5个人要上洗手间,这时候只能有2个人先使用(也就是acquire),其余人只能等着。等到其中一人使用完成(也就是release),下一个人才能使用。
//定义一个信号量有2个位置
Semaphore semaphore = new Semaphore(2);
@RequestMapping("thread")
public int test() {
//多开几个线程
for (int i = 0; i < 5; i++) {
//练习下信号量
new Thread(() ->
{
try {
//判断有无当前信号量位置
if (semaphore.availablePermits() > 0) {
System.out.println(Thread.currentThread().getName() + "有当前信号量位置");
} else {
System.out.println(Thread.currentThread().getName() + "有当前信号量无位置,进入等待");
}
semaphore.acquire();
System.out.println(Thread.currentThread().getName() + "已拿到当前信号量");
Thread.sleep(1000);
semaphore.release();
System.out.println(Thread.currentThread().getName() + "已释放当前信号量");
} catch (Exception ex) {
}
}).start();
}
return 0;
}