2016-04-06 11 views
0

kişi @GuardedBy ("mutex") özel Harita haritası = new HashMap() bu haritanın iplik yapar mı kullanmaktır kasa? Şüpheliyim. Bu kod nasıl bir iplik güvenli haritasının kullanılacağına nasıl karar verebilir?
Sanırım bu sadece bir çeşit dokümantasyon.mu @GuardedBy ("mutex") güvenli veri iplik yapmak ya da ben fark etmiş sadece bir dokümantasyon

+0

Sadece 'map' erişimini korumak için _field_'ın ne olacağını açıklayan belgeler. Eşzamanlılık kitabını mı okuyorsunuz? Bu kitabın başında açıklanmalıdır. – Savior

+0

Ayrıca bkz http://stackoverflow.com/questions/11362298/guardedby-threadsafe-notthreadsafe – Raedwald

+0

emin m okuma .. sadece bir başkası ile aynı argüman vardı. Gördüğünüz gibi, gerçekten iş parçacığı için güvenli bir şey yaptığına inanamıyorum. Mekanizma hiç belirtilmemiş. –

cevap

2

Bu belgelerdir. Bir statik analiz programı, @GuardedBy ek açıklamasını içeren Java sınıf dosyanızı inceleyebilir ve tüm okumaların veya yazmaların kilit tarafından korunmadığını bildirebilir. FindBugs program reportedly does so.

1

Varsayılan olarak, @GuardedBy belirli bir şekilde ele alınmaz ve sorun değil. Ek açıklamalar, genellikle niyeti belgeleyen meta verilerdir.

Dil için belirli bir ek açıklama kullanılması, okunabilirliği ve kodun sadeliğini olumsuz yönde etkileyebilecek bir şeydir, bu nedenle dikkatle yapılması gerekir.

  • gerçek davranış açıklama gömülü olan durumlar vardır gayet (örn @Override)

ek açıklamaları için amaçlanan kullanımları ne sen (https://docs.oracle.com/javase/tutorial/java/annotations/) olsa bir göz atacak olursak, sizi @GuardedBy'dan faydalanabileceğiniz bazı yolları kolayca hayal edebilirsiniz.

IIRC, FindBugs, JCIP ek açıklamalarını işleyen ilk araçtır ve belirli bir projede, aslında açıklamalı koleksiyonları iş parçacığı için güvenli kılan araçları uygulayabileceğinizi kolayca hayal edebilirsiniz (projenizle sınırlı olması gereken bazı kısıtlamalar varsa)).

@GuardedBy'un ana noktası, her zaman hangi kaynakların hangi kilitlerle korunduğunu izlemek istediğiniz zihinsel modeldir. Konular arasında her şeyi paylaştığınız her seferinde "bu paylaşılan verinin ne yapması gerektiğini" düşünmek kötü bir alışkanlık değildir.

İlgili konular