2011-12-21 3 views

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.

+0

Teşekkür bakın. Aslında sadece düzeltildi, sonrası :-) değişecek –