信号量实现对象池
Posted zhangchiblog
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了信号量实现对象池相关的知识,希望对你有一定的参考价值。
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();
})
}
以上是关于信号量实现对象池的主要内容,如果未能解决你的问题,请参考以下文章
newCacheThreadPool()newFixedThreadPool()newScheduledThreadPool()newSingleThreadExecutor()自定义线程池(代码片段