并发新构件之Semaphore:信号量

Semaphore :JDK描述,通常用于限制可以访问某些资源(物理或逻辑的)的线程数目。一句话说明了他的作用。信号量有一个虚拟的许可证池,new Semaphore(10);构造一个含有10个许可证的信号量。

acquire():获取一个许可证,在方法返回之前线程被阻塞

acquire(N):获取N个许可证,在方法返回之前线程被阻塞

release():释放1个许可证,将其返还给信号量对象

release(N):释放N个许可证,将其返还给信号量对象

最简单的例子(摘自https://www.cnblogs.com/limingluzhu/p/4870871.html

package com.houjun.current.newClassBank;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

/**
 * @Author: HouJun
 * @Date: 2019/10/18 15:25
 * @Description: 信号量最简单的测试例子
 * @version: 1.0
 */
public class SemphoreTest {
    public static void main(String[] args) {
        ExecutorService executorService = Executors.newCachedThreadPool();
        Semaphore semphore = new Semaphore(5);//包含5个许可证
        for (int i = 0; i < 20; i++) {
            final int no = i;
            executorService.execute(new Runnable() {

                @Override
                public void run() {
                    try {
                        semphore.acquire();//获取许可
                        System.out.println("Accessing : "+no);
                        Thread.sleep(2000);//等待两秒,查看输入效果
                        semphore.release();//访问完毕,释放
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            });
        }

    }
}
 
原文地址:https://www.cnblogs.com/houj/p/11698850.html