前言
体能状态先于精神状态,习惯先于决心,聚焦先于喜好。
信号量
信号量属于同步工具类,通过指定一个数字来限定同时访问一个特定资源的线程的数量。
线程通过 semaphore.acquire() 方法获得许可,通过 Semaphore.release() 释放许可。
许可是有限的资源,线程如果无法申请到则阻塞,释放许可后,其他线程可以申请
场景举例
场景
假设有三个人要上一条小船,但是这个船一次最多通过2个人。
所以可以使用信号量,获得许可的人可以先上船。
代码
import java.util.concurrent.Semaphore;
public class SemaphoreTest {
private static Semaphore s=new Semaphore(2);
public static void main(String[] args) {
//用 for 循环模拟三个人
for(int i=0;i<3;i++) {
Thread t=new Thread("name"+i) {
@Override
public void run() {
super.run();
try {
//获取信号量
s.acquire();
Thread.sleep(3000);
System.out.println(Thread.currentThread().getName()+" 通过小门进入了小船");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
s.release();
}
}
};
t.start();
}
}
}