我有其最大大小是5000。當一個對象尚未的時間等5,10或100秒的類型特定量更新時,它會從列表中刪除的對象的列表。ScheduledExecutorService的性能
什麼是處理這種情況,最好還是優先選擇?
爲每個對象更新使用計劃任務。取消舊的並重置新的。
或者使用固定延時一個預定的任務說500毫秒。通過時間比較檢查舊的對象...
或別的東西。
你有什麼建議?
我有其最大大小是5000。當一個對象尚未的時間等5,10或100秒的類型特定量更新時,它會從列表中刪除的對象的列表。ScheduledExecutorService的性能
什麼是處理這種情況,最好還是優先選擇?
爲每個對象更新使用計劃任務。取消舊的並重置新的。
或者使用固定延時一個預定的任務說500毫秒。通過時間比較檢查舊的對象...
或別的東西。
你有什麼建議?
我實際使用其使用Map<Object, Long>
用於存儲每個元件的到期時間的實現,一個java.util.Timer
每Ñ秒運行,並移除每過期元件。
我真的不能說這是最好的實現,因爲我只用它幾百個簡單的元素(即不復雜的對象)。
如果你可以使用Google's Guava,你應該給Cache
類一試。
例如,你可以爲每個類型的對象緩存:
LoadingCache<String, ObjectOfType1> type1Cache = CacheBuilder.newBuilder()
.maximumSize(5000)
.expireAfterWrite(5, TimeUnit.SECONDS)
.removalListener(MY_LISTENER)
.build(
new CacheLoader<String, ObjectOfType1>() {
public Graph load(String key) throws AnyException {
return createExpensiveGraph(key);
}
});
併爲Type2
:
LoadingCache<String, ObjectOfType2> type2Cache = CacheBuilder.newBuilder()
.maximumSize(5000)
.expireAfterWrite(10, TimeUnit.SECONDS)
.removalListener(MY_LISTENER)
.build(
new CacheLoader<String, ObjectOfType2>() {
public Graph load(String key) throws AnyException {
return createExpensiveGraph(key);
}
});
然後,你可以只使用一個緩存就好像它是一個Map
:
ObjectOfType1 o1 = type1Cache.get("1");
ObjectOfType2 o2 = type2Cache.get("2");
你可以讓對象自己聲明它們已經過期,然後h一個聽衆服務處理他們? – Rossiar
在谷歌搜索'java TimedList'。 – arturo
這實際上取決於在從列表中移除某些東西時是否需要執行任何操作。如果這是一個簡單的刪除,你可以只使用一個線程。如果你需要做一些工作,一堆線程將是可取的。 –