9 Aralık 2014 Salı

Synchronized

       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