zoukankan      html  css  js  c++  java
  • 并发新构件之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();
                        }
                    }
                });
            }
    
        }
    }
     
  • 相关阅读:
    使用JDBCTemplate执行DQL/DML语句
    spring中JDBCTemplate的简单应用
    Druid数据库连接池工具类
    Same Tree
    Remove Duplicates from Sorted List
    Length of Last Word
    Remove Element
    Remove Duplicates from Sorted Array
    java-StringBuffer更改功能
    java-StringBuffer的删除功能
  • 原文地址:https://www.cnblogs.com/houj/p/11698850.html
Copyright © 2011-2022 走看看