

Oncelikler benim bildiğin threadLocal tanımını yapayım.ThreadLocal kendisine generic olarak verilen veri tipi için cağıran tüm thread ler için yeni bi instance dündürür.Peki kanallar arasında ortak kullanılan nesneleri her sınıfta tanımlamak yerine neden ThreadLocal den cekiyoruz? ThreadLocal de yeni bi instance olusturuyor bellek acısından değişen bi nokta yok gibi. Ayrıca threadlocalde initial olarak bir A nesnesi olduğunu düşünelim.A nesnesini bir kanal elde edip üzerinde değişiklik yaptktan sonra 2. bir kanal A nesnesinin hangi instance ına erişicektir ilk haldekimi değişmiş olan mı? threadlocal ın remove metodu nun çağrılmamasının bazı riskler doğuracağı yazıyor(bellek,güvenlik sıkıntıları gibi)bunun nasıl olabileceğini bir senaryo ile acıklayabilirmisiniz lütfen.


Bu tanımdaki hata şu, Thread'ler için yeni bir instance yaratıp döndürmez, ThreadLocal nesnesine erişen thread'in daha önceden set etmiş olduğu nesneyi döndürür.Bu thread daha önceden nesne set etmemişse, ThreadLocal nesnesi initialValue metodunu çağırarak set eder ve o nesneyi döner.
Bu şekilde oluşturulan
T1'de
Yukarıdakiler olduktan sonra, T2
Anlamlı olmasa da, uygulamak için aşağıdaki kod kullanılabilir.
Daha düzgün anlatım için buralara bakılabilir.
cevaplandı: 26 Ara '12, 10:16
Mesut