2011-06-24 6 views
7

Eclipse ile bir yöntem, üye veya sınıfa ait tüm referansları bulmak mümkündür. Senkronize edilmiş monitörün tüm referanslarını bulmak mümkün mü?Tümü aynı monitörde Synchroned ile Java'da nasıl senkronize bulabilirim?

Bu Eclipse ile mümkün değilse, başka bir Java IDE ile mümkün mü?

Sorunum, monitör nesnesinin birçok referansa sahip olması. Tüm referansların aranması birçok sonuca geri dönecektir. Sadece bu nesneyle nerede senkronize olduğunu göreceğim.

DÜZENLEME:

public class LockClass{ 
    public synchronized void add(Object any){ 
    } 
} 

public class AnyOther{ 
    private LockClass lock; 

    public AnyOther(LockClass lock){ 
    this.lock = lock; 
    } 

    public void doSomethings(){ 
    synchronized(lock){ 
     //... 
    } 
} 

Şimdi bütün monitör olarak LockClass kullanan senkronize arama istiyorum: Ben ne anlama geldiğini bir örnek ekleyin. Bu statik bir analiz. Aynı nesne üzerinde mümkün olan tüm senkronize blokları bulmak için Select your element->rt-click menu->References->workspace

Onun mümkün değildir:

  • AnyOther.doSomethigs

cevap

1

dümdüz bazı terimler dönelim:

  • senkronize bir bloğun monitör
  • Kaynaklar senkronize bir olacağına dair belirsizliklerin olası değildir monitöre bir nesne üzerinde aslında monitörü şudur: tüm yerleri istiyorsun Bu monitöre başvurulan kod veya monitöre işaret eden tüm alanlar/yerel değişkenler?

Kodda monitöre başvurulan nerede bulunur?

Suraj zaten bunun nasıl açıklar: Search > References > Workspace.... Ayrıca, bu referansları yalnızca okuma erişimi, yazma erişimi, uygulayıcılar vb. Için filtreleyebilirsiniz. Bu tür referanslar statik kod analizi yoluyla bulunur, bu nedenle uygulamayı çalıştırmaya gerek yoktur. Bununla birlikte, bu, bir nesneye yapılan bir referansın bir alana atanmış olduğu vakaları otomatik olarak algılamayacaktır, daha sonra başka bir değişkene atanır. Bu, yalnızca bu özel referansa başvuruyu algılar.

Monitörü hangi değişkenler gösteriyor?

birkaç alanlar/yerel değişkenler nesne başvurusu kalması bu işleyecektir. Bunu yapmak için uygulama çalışıyor olmalıdır. Kesme noktasını, monitörün görülebileceği uygun bir yere koymanız gerekir (en uygun yol, söz konusu monitörü kullanan senkronize edilmiş bir blok etrafında en kolay yoldur). Değişkenler görünümü mevcut kapsamda mevcut olan tüm değişkenleri gösterir.Değişkenler görünümünde nesneyi referans seçerek, içerik menüsünü getirerek ve All References...'u seçerek bir nesneye tüm başvuruları alabilirsiniz. Bu, nesneyi referans alan tüm alanları/yerel değişkenleri gösterir.

2

bulmak için başvurular LockClass.add: Benim örnek bulurum istiyorum Çünkü bir referans tarafından işaret edilen gerçek nesne çalışma zamanına bağlı olacaktır.

1

Eclipse, belirli bir nesneye başvurular bulamaz. Sadece belirli bir sembole referanslar bulabilir, örn. bir değişken, bir sınıf, bir yöntem a.s.o. Bir monitör this veya o değişkeninin değeri olabilir - her ikisi de çalışma zamanında aynı nesneyi işaret eder. Ancak, Eclipse bunun gibi çalışma zamanı bilgilerini ayıklamanın bir yolu yoktur.

İlgili konular