zoukankan      html  css  js  c++  java
  • 信号量实现对象池

    class ObjPool<T,R>{
      final List<T> pool;
      //信号量实现限流器
      final Semaphore sem;
      //构造方法
      ObjectPool(int size,T t){
        pool = new Vector<T>(){};
        for(int i=0; i<size; i++){
          pool.add(t);
        }
        sem = new Semaphore(size);
      }
      
      R exec(Function<T,R> func){
        T t = null;
        sem.acquire();
        try{
          t = pool.remove(0);
          return func.apply(t);
        }finally{
          pool.add(t);
          sem.release();
        }
      }

      //创建线程池
      ObjPool<Long,String> pool =
        new ObjPool<Long, String>(10,2);
      //通过对象池获取t,之后执行
      pool.exec(t -> {
        System.out.println(t);
        return t.toString();
      })
    }





  • 相关阅读:
    RabbitMQ消息队列 基本订阅/发布Demo(PHP版)
    Docker安装部署RabbitMQ
    CentOS Docker 基本操作
    new worker
    JavaScript避坑
    如何开启MySQL慢查询日志
    kinshard
    Linux shell
    Linux shell
    Linux shell
  • 原文地址:https://www.cnblogs.com/zhangchiblog/p/10676942.html
Copyright © 2011-2022 走看看