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

  • hockeywebcasts

    hockeywebcas

    31 EKİM 2012
  • Menglong Tav

    Menglong Tav

    18 Temmuz 2010
  • TheForgottenGamer1

    TheForgotten

    28 AĞUSTOS 2009