SORU
15 HAZİRAN 2010, Salı


Senkronize yöntemi, nesne ya da yöntemi üzerinde kilit Java?

Eğer aynı sınıfta 2 senkronize yöntem, ama her biri farklı değişkenleri erişen varsa, 2 iş parçacığı aynı anda bu 2 yöntem erişebilir? Kilit nesne üzerinde meydana gelir, ya da senkronize yöntemin içinde değişken olarak belli oluyor mu?

Örnek:

class X {

    private int a;
    private int b;

    public synchronized void addA(){
        a  ;
    }

    public synchronized void addB(){
        b  ;
    }

}

2 iş parçacığı erişim sınıfı X aynı örneği x.addA() gerçekleştirme ve x.addB() aynı anda?

CEVAP
15 HAZİRAN 2010, Salı


Eğer yöntem olarak synchonized public synchronized void addA() yazarak yaptığın gibi) bildirirseniz üzerinde eşitleyintümnesne, iki iş parçacığı aynı nesneden farklı bir değişken erişmek birbirimizi neyse blok.

Eğer bir seferde bir değişken sadece eşitlemek isterseniz, iki iş parçacığı farklı değişkenlere erişirken birbirlerini engellemez, synchronized () bloklar halinde onları ayrı ayrı senkronize var. a b nesne başvurularını olsaydı kullanırsınız:

public void addA() {
    synchronized( a ) {
        a  ;
    }
}
public void addB() {
    synchronized( b ) {
        b  ;
    }
}

Ama ilkel oldukları için bunu yapamazsın.

Sen Atomicİnteger yerine kullanmanızı öneririm:

import java.util.concurrent.atomic.AtomicInteger;
class X {
    AtomicInteger a;
    AtomicInteger b;
    public void addA(){
        a.incrementAndGet();
    }
    public void addB(){ 
        b.incrementAndGet();
    }
}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Adam Khoury

    Adam Khoury

    23 Ocak 2008
  • bcbauer

    bcbauer

    7 ŞUBAT 2007
  • Codecourse

    Codecourse

    3 ŞUBAT 2009