şu kodu göz önünde bulundurun:Java iki senkronize yöntemler
public class SynchronizedCounter extends Thread {
private int c = 0;
public synchronized void increment() {
c++;
}
public synchronized void decrement() {
c--;
}
public void run() {
for(;;)
increment();
}
}
static void main(String[] args) {
SynchronizedCounter counter = new SynchronizedCounter();
counter.start();
for(;;)
counter.decrement();
}
bu artım() ve eksiltme() yöntemleri birbirlerini bitirmek için ya da değil beklemek anlamına gelir mi?
EDIT: ve bu beklemez?
synchronized(this) {
//...
}
Yani iki yöntem de etkili aynı muteks nesne üzerinde kilitleme gibidir:
static void main(String[] args) {
SynchronizedCounter counter1 = new SynchronizedCounter();
SynchronizedCounter counter2 = new SynchronizedCounter();
counter1.start();
for(;;)
counter2.decrement();
}
evet kilidi olmadan senkronize bir birinden başka senkronize bir yöntem diyebiliriz, siz uzanan yaklaşık haklısın bu örnek/nesnenin herhangi senkronize çalıştırma yöntemi olamazdı Konu, sadece kodu sabit :) – MBZ