Semaphore信号量

Posted 意犹未尽

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Semaphore信号量相关的知识,希望对你有一定的参考价值。

 

限制并发资源的并发访问数量。 samephore.acquire(); 获取许可  samephore.release(); 释放一个许可。

public class SemaphoreTest implements Runnable {
    Semaphore samephore;
    int id;

    public SemaphoreTest(Semaphore samephore, int id) {
        this.samephore = samephore;
        this.id = id;
    }

    @Override
    public void run() {

        // TODO Auto-generated method stub
        try {
            samephore.acquire();
            Thread.sleep(1000);
            System.out.println("客户编号" + id + "正在办理任务");
            samephore.release();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        Semaphore samephore = new Semaphore(10,true);// 限制并发访问次数为10 true为采用公平模式。先进的先遍历
        for (int i = 0; i < 20; i++) {
            new Thread(new SemaphoreTest(samephore, i)).start();;
        }
    }

}

模拟银行10个办理任务的窗口。 samephore.acquire() 如果有10个任务获取许可并没有释放 其他人等待 某一个获取许可正在执行的任务 释放许可才能进入

以上是关于Semaphore信号量的主要内容,如果未能解决你的问题,请参考以下文章

Java并发工具类:Semaphore

Linux(内核剖析):31---内核同步之(信号量(semaphore)读写信号量(rw_semaphore))

Java并发多线程编程——Semaphore

java 多线程 28 : 多线程组件之 Semaphore 信号量

ios开发GCD-dispatch_semaphore_t信号量计数器

python多线程编程—同步原语入门(锁Lock信号量(Bounded)Semaphore)