标签:err semaphore print str col class dem imp 资源
有时候我们需要对一个资源的访问做线程数控制,以防雪崩等问题。
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()); } }
标签:err semaphore print str col class dem imp 资源
原文地址:https://www.cnblogs.com/lay2017/p/10166073.html