S.a. Arkadaşlar,
Synchronized: Bir thread kodu çalıştırırken önce nesneyi
kilitler (yani "nesne benimdir, başkası kullanamaz" der.). Eger nesne
başkası tarafından zaten kilitlenmişse thread'imiz kilit açılana kadar beklemek
zorundadır. Nesneye sahip olduktan sonra kod çalışır. Kod sona erdikten sonra
nesnenin kilidini kaldırır. Şimdi aşağıdaki kod sayesinde ne demek
istediğimizi daha iyi anlayacağınızı umarız. Şunu da söylemekte fayda görüyorum. Bu komut sadece methodlarla birlikte kullanılır. Sınıf veya değişkenlerle kullanılamaz.
package malik;
class SynchronizedKullanimi
implements Runnable {
private int i;
public synchronized void run() {
if (i%5 != 0) { i++; }
for(int x=0; x<5; x++, i++)
{ if (x > 1) Thread.yield();
}
System.out.print(i + " ");
}
public static void main(String[] args) {
SynchronizedKullanimi n = new SynchronizedKullanimi();
for(int x=50; x>0; --x) { new Thread(n).start();
} //main
} //run
}
//synchronized
Synchronized komutu varken
gösterilen çıktı ile Synchronized varken çıkan komuda dikkat edelim. Burada threadlerin kafalarına göre araya girmesiyle her defasında farklı bir çıktı elde edilir. Tekrar çalıştırdığınızda farklı birsonuç üretecektir.
Hiç yorum yok:
Yorum Gönder