27 NİSAN 2011, ÇARŞAMBA
Güvenli bir senkronize yöntemi senkronize bir yöntemi çağırmak için mi?
Eğer senkronize bir yöntem başka bir yöntemi senkronize ararsa, iş parçacığı güvenli mi?
void synchronized method1() {
method2()
}
void synchronized method2() {
}
CEVAP
27 NİSAN 2011, ÇARŞAMBA
synchronized
, gibi yöntemler işaretlediğinizde evet, o zaman gerçekten bu işi yapıyorsun
void method1() {
synchronized (this) {
method2()
}
}
void method2() {
synchronized (this) {
}
}
İş parçacığı çağrı method1, bundan sonra method2 haline geldiğinde olacak zaten this
, kilitli tutar emin olun, sonra geçer.
Konu doğrudan method1 veya method2, o zaman geldiğinde kilidi (this
) alabildiği kadar engeller ve enter.
Yorum James Black tarafından belirtildiği gibi, yöntem vücudun içinde ne farkında olmak zorunda.
private final List<T> data = new ArrayList<T>();
public synchronized void method1() {
for (T item : data) {
// ..
}
}
public void method3() {
data.clear();
}
Birdenbire değil, iş parçacığı güvenli çünkü bakıyorsun bir ConcurrentModificationException
geleceğinize, çünkü method3
uyumsuz, ve böylece olabilir denilen Parçacığı Bir süre İplik B çalışma method1
.
Bunu Paylaş:
Nasıl yansıması genel bir Yöntemi çağı...
Nasıl Android bir gecikmeden sonra bir...
Nasıl yansıma özel bir yöntemi çağırma...
Fasulye başlatma tamamlandıktan sonra ...
Parametrelerle Yöntemi Çağırmak için N...