İçeriğe geçmek için "Enter"a basın

Multithreading | Thread Senkronizasyonu | synchronized keyword

Java’da senkronizasyon;birden fazla thread’in paylaşılan herhangi bir kaynağa erişim kontrolünü sağlama özelliğidir.Yani çoklu işlerin(multiple threads) meydana geldiği programlarda iş parçacıkları(thread) aynı anda aynı kaynağa erişmeye kalkarlar buda istenmeyen ve hatalı sonuçların oluşmasına sebep olur.

Bu sorunu çözmek için;metotlara veya kod bloğuna senkronize bloklar olarak belirtmemiz gerek.Bunu da synchronized anahtar kelimesi ile yaparız.

Bir örnekle açıklayalım;

[cc lang=”java”]
package yazarbeyapp;

public class YazarbeyApp {

private int count=0;

public synchronized void artir(){

count++;

}

public static void main(String[] args) {

YazarbeyApp app = new YazarbeyApp();

Thread thread1 = new Thread(new Runnable() {

@Override
public void run() {

for(int i=0;i<10000;i++){ app.artir(); } } }); Thread thread2 = new Thread(new Runnable() { @Override public void run() { for(int i=0;i<10000;i++){ app.artir(); } } }); thread1.start(); thread2.start(); try { thread1.join(); thread2.join(); } catch (InterruptedException ex) { ex.printStackTrace(); } System.out.println(app.count); } } [/cc] Çıktı;

Main metodumuzun üzerinde  count adında bir değişken tanımladık.

synchorized keyword’ü ile işaretlenmiş artir() metodunda ise  “count++” operatörünü kullandık

Thread sınıfından thread1 ve thread2 olmak üzere iki tane nesne oluşturduk daha sonra bunların kurucu metodunda Runnable iç sınıfı  tanımlayıp overrite run() metodunu etkin hale getirdik.run() metodunda ise  artir() metodunu çağıran 10000 limitli bir for döngüsü oluşturduk

thread1 ve thread2 nesnelerini start() metoduyla başlattık daha sonra birinin işlemi bitmeden diğeri başlamaması için alt satırlarda try-catch yapısına sarılmış join() metodunu kullandık.

Son olarak count değişkeninin çıktısını aldık.

NOT:

join() metodu bir thread yürütülürken diğer thread‘leri beklemeye alır fakat artir() metoduna synchorized keyword’ü ile işaretlemezsek arada çıktıda hatalar meydana gelmektedir.

İlk yorum yapan siz olun

Bir cevap yazın