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

  • El SalvaLobo

    El SalvaLobo

    10 Temmuz 2006
  • Gan Eden Productions

    Gan Eden Pro

    11 HAZİRAN 2011
  • grickle

    grickle

    22 AĞUSTOS 2006