JUC练习代码-Semaphore简易用法

public class SemaphoreTest {
    public static void main(String[] args) {
        //6辆车抢三个停车位
        Semaphore semaphore = new Semaphore(3);
        for(int i=0;i<6;i++){

            new Thread(()->{
                try {
                    semaphore.acquire();
                    System.out.println(Thread.currentThread().getName()+"抢到了车位");
                    //霸占2秒
                    TimeUnit.SECONDS.sleep(2);
                    System.out.println(Thread.currentThread().getName()+"离开了车位");
                    semaphore.release();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}

打印结果如下:

Thread-0抢到了车位
Thread-2抢到了车位
Thread-1抢到了车位
Thread-1离开了车位
Thread-2离开了车位
Thread-3抢到了车位
Thread-4抢到了车位
Thread-0离开了车位
Thread-5抢到了车位
Thread-3离开了车位
Thread-5离开了车位
Thread-4离开了车位

可以用于限流场景

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章