Senkronizasyonu olmayan son alan
Bir uyarı olmayan son sınıf sahasına ... senkronize her zaman gösteriyor. İşte kod:
public class X
{
private Object o;
public void setO(Object o)
{
this.o = o;
}
public void x()
{
synchronized (o) // synchronization on a non-final field
{
}
}
}
aşağıdaki şekilde.. kodlama değiştirdim
public class X
{
private final Object o;
public X()
{
o = new Object();
}
public void x()
{
synchronized (o)
{
}
}
}
Yukarıdaki kodu olmayan son sınıf alanını eşitlemek için doğru yol olduğundan emin değilim. Nasıl olmayan nihai bir alan senkronize edebilir miyim?
CEVAP
Öncelikle, gerçekten de daha yüksek bir düzeyde eşzamanlılık sorunları ile başa çıkmak için zor denemek için teşvik ediyoruz, yani ExecutorServices, Callables, Vadeli işlemler gibi java.util.concurrent sınıfları kullanarak çözme
Bu varlık bir şey yok dediyanlışnihai olmayan bir sahada tek başına eşitleniyor. Sadece akılda tutmak gerekireğer nesne başvurusu değişirse, aynı kod bölümüne paralel olarak çalışabilir. I. e., bir iş parçacığı eşzamanlı bloktaki kodu çalıştırır ve birisi setO(...)
, ararsa başka bir iş parçacığı çalıştırabiliraynısenkronize blok üzerindeaynı andaaynı anda.
Senkronize hangi özel erişim (veya bir nesne "" ihtiyacınız olanlar için özel erişim). koruma ihtiyacınız olan her nesne Eğer bu sınıfın çeşitli alanları içeriyorsa, tasarım yeniden gözden geçirmek ve belki de soyut bir düzeyde tanıtmak isteyebilirsiniz.
(@Tarafından önemli noktalar Jon Skeet aşağıda dikkatle okuyun :-)
&Quot bağlayın;ayrıcalıklı" port ...
JQuery düzenli ifade alan doğrulama...
Mevcut Django bir model için bir alan ...
Yansıması ile özel bir alan bulmak?...
Bir dizeden kaldırmak sayısal olmayan ...