码迷,mamicode.com
首页 > 其他好文 > 详细

十一、信号量控制Semaphore

时间:2018-12-24 02:37:03      阅读:99      评论:0      收藏:0      [点我收藏+]

标签: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());
    }

}

 

十一、信号量控制Semaphore

标签:err   semaphore   print   str   col   class   dem   imp   资源   

原文地址:https://www.cnblogs.com/lay2017/p/10166073.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!