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

  • Bigapplemagic

    Bigapplemagi

    22 EYLÜL 2011
  • jpmkm1

    jpmkm1

    4 NİSAN 2008
  • thepoke64738

    thepoke64738

    17 HAZİRAN 2011