SORU
23 Kasım 2014, Pazar


İd = 1 - atom numarası nedir?

OCP, sayfa 291 6 Programcı Java SE Uygulama Sınavları, soru 25:

public class Stone implements Runnable {
    static int id = 1;

    public void run() {
        id = 1 - id;
        if (id == 0) 
            pick(); 
        else 
            release();
    }

    private static synchronized void pick() {
        System.out.print("P ");
        System.out.print("Q ");
    }

    private synchronized void release() {
        System.out.print("R ");
        System.out.print("S ");
    }

    public static void main(String[] args) {
        Stone st = new Stone();
        new Thread(st).start();
        new Thread(st).start();
    }
}

Cevapları biridir:

Çıkışı P Q P Q olabilir

Doğru cevap olarak işaretledim. Benim akıl:

  1. İki iş parçacığı başlıyoruz.
  2. İlk run() girer.
  3. JLS 15.26.1, birincisi göre değerlendirir 1 - id. Sonuç 0. İş parçacığı yığınının üzerinde depolanan. Sadece 0 kaydetmek üzere statik id, ama...
  4. Patlama, zamanlayıcı çalıştırmak için ikinci iş parçacığının seçer.
  5. Yani, ikinci iş parçacığı run() girer. Statik id pick() yöntem o yürütür yani 10**. P Q yazdırılır.
  6. Zamanlayıcı çalıştırmak için ilk iplik seçer. Yığından 0 alır ve statik kaydeder id. Yani, ilk iş parçacığı da pick() yürütür ve P Q yazdırır.

Ancak, kitapta bu cevap yanlış olduğunu yazıyor:

Hattı 0 1 arası id = 1 - id değiştirir id değeri nedeniyle yanlıştır. Aynı yöntemi iki kez idam edilmesi için bir şans var.

Ben aynı fikirde değilim. Senaryo, ben yukarıda sunulan için bir şans olduğunu düşünüyorum. Böyle bir takas atomik değil. Yanılıyor muyum?

CEVAP
23 Kasım 2014, Pazar


Yanılıyor muyum?

Hayır, örnek zaman çizelgesi olarak kesinlikle haklısınız.

Ek olarak bu değil atom, değil Garanti Bu yazmak için id olacak aldı diğer iplik neyse, verilen bu yok senkronizasyon ve alan değil uçucu.

Bu yanlış olduğu gibi referans malzeme için biraz sinir bozucu oluyor :(

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • cdgotx

    cdgotx

    8 Kasım 2011
  • hytchme

    hytchme

    9 Mart 2014
  • Munchkin the Teddy Bear

    Munchkin the

    30 EYLÜL 2011