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

  • BachelorsPadTv

    BachelorsPad

    17 Ocak 2012
  • Jonah Penna

    Jonah Penna

    11 EYLÜL 2005
  • Matt Stokes

    Matt Stokes

    22 Ocak 2008