如何编写一个只公开 20 个包含两个方法的对象的类,borrowObject
并且returnObject
代码必须是线程安全的。还要编写一个方法来获取 Live 的数量Objects
(Objects
当前由其他类使用)。
我可以borrowObject
使用一个计数器来编写方法。但是如何编写returnObject
. 当客户端类调用该方法时,对象将被销毁。如何实现。覆盖 finalize 方法也不保证对象将不再在堆中。
如何编写一个只公开 20 个包含两个方法的对象的类,borrowObject
并且returnObject
代码必须是线程安全的。还要编写一个方法来获取 Live 的数量Objects
(Objects
当前由其他类使用)。
我可以borrowObject
使用一个计数器来编写方法。但是如何编写returnObject
. 当客户端类调用该方法时,对象将被销毁。如何实现。覆盖 finalize 方法也不保证对象将不再在堆中。
在后台使用一个 ArrayBlockingQueue 预填充大小为 20 个成员,并在调用借用时从队列中取出,并在调用返回时推送,并且活动计数为 20 减去队列大小...
您需要静态类成员作为实例的计数器。20 个实例也保存在一个数组中。保持构造函数私有。然后实现创建实例的工厂方法,该方法将控制计数器成员并将新实例放入数组中。实现一种方法来处理对象,并更新计数器和数组引用。
class TwentyOnly{
private static List<TwentyOnly> twenty= new ArrayList(20);
private static int counter=0;
private TwentyOnly(){
}
public static synchronized TwentyOnly borrow(){
if(counter<20){
twenty.add(0,new TwentyOnly());
counter++;
return twenty.get(0);
}
throw new RUntimeException("All Allowed instances allowed");
}
public static synchronized void returnObject(TwentyOnly t){
twenty.remove(t);
counter--;
}
}
你在找这个吗?