十信号量控制Semaphore

Posted lay2017

tags:

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

一、简介

有时候我们需要对一个资源的访问做线程数控制,以防雪崩等问题。

JDK中,信号量可以处理这样的问题:Semaphore

JDK文档:http://tool.oschina.net/uploads/apidocs/jdk-zh/java/util/concurrent/Semaphore.html

信号量这种,类似于令牌桶算法。一个线程要访问资源,先从桶里面取令牌,得到令牌才可以执行,执行完毕了把令牌放回桶里面。

二、代码示例

import java.util.concurrent.Semaphore;

public class SemaphoreDemo {
    /**
     * 设置信号量为1
     */
    private static Semaphore semaphore = new Semaphore(1);

    public static void main(String[] args) throws InterruptedException {
        // 当前信号量为1
        System.out.println(semaphore.availablePermits());
        // 信号量 -1
        semaphore.acquire();
        // 当前信号量为0
        System.out.println(semaphore.availablePermits());
        // 尝试获取信号量失败
        System.out.println(semaphore.tryAcquire());
        // 信号量不变,为0
        System.out.println(semaphore.availablePermits());
        // 释放信号量 +1
        semaphore.release();
        // 信号量为1
        System.out.println(semaphore);
        // 获取信号量成功
        System.out.println(semaphore.tryAcquire());
    }

}

 

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

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

linux驱动程序中的并发控制-5(信号量(semaphore))-47

linux驱动程序中的并发控制-5(信号量(semaphore))-47

linux驱动程序中的并发控制-5(信号量(semaphore))-47

python,信号量,semaphore

Java 信号量 Semaphore 介绍