2012-11-06 13 views
5

Uygulama önbelleğe alınmış bir iş parçacığı havuzu kullanıyor olsa bile, sunucu ortamında dağılmıyorsanız, yerel bir iş parçacığı üzerinde arama yapmayı mı çağırmanız gerekir? Bir iş parçacığı uzağa gider sonraiş parçacığı yerel kaldırma yöntemi

... parçacığı yerel örneklerinin kopyalarının tüm çöp toplama tabidir ...

: javadoc for ThreadLocal gereğince

public static ThreadLocal<Integer> i = new ThreadLocal<Integer>(){{ 
    public Integer initialValue(){return 3;} 
}; 

cevap

2

Teoride, hem Thread hem de ThreadLocal hala oynatılıyorsa, değere ulaşılabilir. Eğer ulaşılamaz ise, teoride, aksi takdirde ilgisizse değer çöp toplanabilir. Bununla birlikte, OpenJDK'de bir hata var demektir, bu değer(şaşırtıcı olarak yaygın) veThread hala çalışıyorsa, sızıntı yapacağı anlamına gelir.

Evet, bir anlamda, bir sunucu ortamı hakkında özel bir şey yok. Ancak, genellikle, geliştirme sırasında kodu tekrarladığınızda, ThreadLocal değerinin, değerden (değer sınıfının sınıfa dönüştüğü sınıf-sınıfı-tüm-sınıflara - sürekli yüklenen-sınıf-yükleyici-bu-statik-alanları-ThreadLocal için). Java Fasulye ve JDBC uygulamaları benzer sorunları olabilir.

5

Eğer iş parçacığı hala etrafta olabilir ve kaynağın dereferanslı olmasını istiyorsanız, remove()'u daha iyi arayın.


Temizlemek isterseniz basit bir yerel değişken kullanmayı düşünebilirsiniz.

+0

Önbelleğe alınmış bir iş parçacığı havuzunuz varsa, iş parçacığı gitmeyebilir veya olmayabilir. –

İlgili konular