java信号量实现对象池
程序员文章站
2022-06-04 22:59:46
...
import java.util.List;
import java.util.Vector;
import java.util.concurrent.Semaphore;
import java.util.function.Function;
public class ObjectPool<T, R> {
//对象池
final List<T> pool;
//用信号量实现限流器
final Semaphore sem;
public ObjectPool(int size, T t) {
pool = new Vector<>();
for(int i = 0; i < size; i++) {
pool.add(t);
}
sem = new Semaphore(size);
}
//利用对象池的对象,调用func
R exec(Function<T, R> func) {
T t = null;
R r = null;
try {
sem.acquire();
t = pool.remove(0);
r = func.apply(t);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
pool.add(t);
sem.release();
}
return r;
}
public static void main(String[] args) {
//创建对象池
ObjectPool<String, String> pool = new ObjectPool<>(10, "demo");
System.out.println(pool.exec(t-> System.currentTimeMillis() + t));
}
}
上一篇: 如何使用会声会影制作MV的详细图文教程
推荐阅读
-
Java线程池FutureTask实现原理详解
-
Java通过注解和反射 实现模拟 Hibernate Validator验证框架对实体对象的字段验证功能
-
使用Java实现面向对象编程——JAVA关键字与保留字说明及使用
-
如何基于Java实现对象List排序
-
大数据-java基础-第12章 面向对象的java实现-接口练习
-
javascript实现Java中的Map对象功能的实例详解
-
.NET Core中如何实现或使用对象池?
-
Java线程池FutureTask实现原理详解
-
JAVA 8 lambda 表达式实现按某个属性值查找集合中符合条件的所有对象并求和
-
使用JAVA中的动态代理实现数据库连接池 JavaSQLJDBC应用服务器互联网