zl程序教程

您现在的位置是:首页 >  其他

当前栏目

Semaphore__控制访问特定资源的线程数量

2023-04-18 15:34:47 时间

使用场景:可以控制访问特定资源的线程数量。

示例:有一条窄道,一次只能允许通行两辆车,通行前由管理员发通行证,通行后归还通行证。

public class SemaphoreDemo {

    public static void main(String[] args) {
        MyRunnable mr = new MyRunnable();
        for (int i = 0; i < 100; i++) {
            new Thread(mr).start();
        }
    }
}
public class MyRunnable implements Runnable {

    // 1、获得管理员对象 Semaphore(2):参数表示当前只允许两个线程执行
    private Semaphore s = new Semaphore(2);

    @Override
    public void run() {

        try {
            // 获得通行证
            s.acquire();
            // 开始行驶
            System.out.println("开始行驶");
            // 行驶需要时间,睡0.2秒
            Thread.sleep(200);
            // 行驶通过后归还通行证
            System.out.println("归还通行证");
            s.release();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

    }
}