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

  • Day9TV

    Day9TV

    22 NİSAN 2010
  • michal lelkowski

    michal lelko

    9 Temmuz 2006
  • ravinderosahn

    ravinderosah

    20 Temmuz 2009