信号量----Semaphore

用于限制获取线程资源的数量

   @Test
    public void test1() {
        //~~资源的次数
        Semaphore semaphore = new Semaphore(3);
        for (int i = 0; i < 10; i++) {
            Parent parent = new Parent("第" + i + "个人", semaphore);
            new Thread(parent).start();
        }
    }

}

/***
 * 资源剩余量的判断
 */
class Parent implements Runnable {
    private String name;
    private Semaphore sc;

    public Parent(String name, Semaphore sc) {
        this.name = name;
        this.sc = sc;
    }

    @Override
    public void run() {
        try {
            //~~查看剩下的资源
            int availablePermits = sc.availablePermits();
            if (availablePermits > 0) {
                System.out.println(name + "终于有资源了");
            } else {
                System.out.println("怎么资源枯竭了");
            }
            //申请资源,
            sc.acquire();
            Thread.sleep(new Random().nextInt(1000));   //~~资源使用的时间
            //~~释放资源
            sc.release();
        } catch (Exception e) {

        }

    }

猜你喜欢

转载自blog.csdn.net/wb_zjp283121/article/details/82385565