Semaphore 介绍
Semaphore 信号量,是一种计数器,用来保护一个或者多个共享资源的访问。如果线程要访问一个资源就必须先获得信号量。如果信号量内部计数器大于 0,信号量减 1,然后允许共享这个资源;否则,如果信号量的计数器等于 0,信号量将会把线程置入休眠直至计数器大于 0.当信号量使用完时,必须释放。
使用示例
public class Test {
public static void main(String[] args) throws Exception{
Semaphore semaphore = new Semaphore(3); //信号量
for(int i=1; i<=6; i++) {
new Thread(() -> {
try {
semaphore.acquire(); //获取信号量位置
System.out.println(Thread.currentThread().getName()+":进入车库!");
TimeUnit.SECONDS.sleep(1);
} catch (Exception e) {
e.printStackTrace();
} finally {
System.out.println(Thread.currentThread().getName()+":退出车库!");
semaphore.release(); //释放
}
}, "Thread-"+i).start();
}
}
}
结果:
Thread-1:进入车库!
Thread-2:进入车库!
Thread-3:进入车库!
Thread-3:退出车库!
Thread-4:进入车库!
Thread-1:退出车库!
Thread-5:进入车库!
Thread-2:退出车库!
Thread-6:进入车库!
Thread-6:退出车库!
Thread-5:退出车库!
Thread-4:退出车库!