如何編寫一個只包含20個對象的類,其中包含兩種方法borrowObject
和returnObject
。代碼必須是線程安全的。也要寫一個方法來獲取當前正在被其他類使用的活動數量的方法。如何編寫一個只公開20個對象的類?
我可以使用一個計數器編寫borrowObject
方法。但是如何編寫returnObject
。當客戶端類調用方法時,對象將被銷燬。如何實現該方法.Overriding finalize方法也不能保證該對象將不再在堆中。
如何編寫一個只包含20個對象的類,其中包含兩種方法borrowObject
和returnObject
。代碼必須是線程安全的。也要寫一個方法來獲取當前正在被其他類使用的活動數量的方法。如何編寫一個只公開20個對象的類?
我可以使用一個計數器編寫borrowObject
方法。但是如何編寫returnObject
。當客戶端類調用方法時,對象將被銷燬。如何實現該方法.Overriding finalize方法也不能保證該對象將不再在堆中。
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--;
}
}
你是在找這個嗎?
在預先填充大小爲20個成員的背景中使用ArrayBlockingQueue,並在調用借用時從隊列中取出,並在調用返回時推入,並且活動計數爲20減去隊列大小......
你需要靜態類成員作爲實例的計數器。這20個實例也保存在一個Array中。保持構造函數私有。然後實現工廠方法來創建將控制計數器成員並將新實例放入數組的實例。實現一個方法來分散對象,並更新計數器和數組引用。
請閱讀 - http://stackoverflow.com/faq#questions – Jayan 2013-04-27 15:32:22
*當客戶端類調用方法的對象將被銷燬*我不明白這一點。你有沒有嘗試過,或者你的實現被破壞?如果您遇到問題,請發佈您的代碼,我們很樂意指導您發現設計錯誤並升級您的代碼。 – 2013-04-27 15:33:51
您可能正在尋找java.util.concurrent.Semaphore。閱讀javadoc並嘗試編寫一些代碼。如果您仍然有問題,請回答一個具體問題。 – Aurand 2013-04-27 15:35:23