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:退出车库!

相关文章: