十信号量控制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