Şunlar arasında hızlı bir soru var: Basit bir WeakRunnableList'im var. 'u temizlemeyi (ölü referansları kaldırmayı) ya da daha zarif ve daha hızlı bir çözüm var mı? Benim WeakRunnableList için tam kaynak:ArrayList <WeakReference <Runnable>> - En iyi nasıl toplanır?
6
A
cevap
6
İşte benim almam. WeakHashMap, sistematik olarak kaldırır, bu nedenle bu yeterlidir. HashCode/Runnable semantics eşittir dikkat edin.
da yorum için Are keySet entries of a WeakHashMap never null? WeakHashMap iteration and garbage collection
import java.util.WeakHashMap;
public class WeakRunnableList
{
private WeakHashMap<Runnable, Void> _items = new WeakHashMap<Runnable, Void>();
public void Add(Runnable r)
{
_items.put(r, null);
}
public void Execute()
{
Iterator<Runnable> iterator = _items.keySet().iterator();
while (iterator.hasNext()) {
Runnable runnable = iterator.next();
if (runnable != null) {
runnable.run();
iterator.remove();
}
}
}
}
1
item.get() çağrıları arasında bir yarış durumunuz var. Item.get() öğesini yerel bir değişkene yerleştiririm ve bunu kullanırdım.
Teşekkür bakın. Aslında sadece düzeltildi, sonrası :-) değişecek –