SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Matus Slovak

    Matus Slovak

    5 Temmuz 2007
  • MysteryGuitarMan

    MysteryGuita

    16 HAZİRAN 2006
  • TomKNJ

    TomKNJ

    26 ŞUBAT 2007