Semphore-多线程争抢多资源解决方案

当我们遇到N个线程抢夺M个资源时(N>M),可以使用Semphore

我们模拟 6辆车抢3个车位
代码:

public static void main(String[] args) {
        //模拟6辆车抢3个车位
        Semaphore semaphore = new Semaphore(3);

        for (int i = 1; i <=6 ; i++) {
            new Thread(()->{
                try {
                    //抢到资源
                    semaphore.acquire();
                    System.out.println(Thread.currentThread().getName()+"抢到了车位");
                    Thread.sleep(3000);
                    System.out.println(Thread.currentThread().getName()+"停了3s离开了车位");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } finally {
                    //释放资源
                    semaphore.release();
                }
            },"thread-"+i).start();
        }
    }

控制台:
Semphore-多线程争抢多资源解决方案_第1张图片

你可能感兴趣的:(Java)