www.fatihkabakci.com

Personal Website and Computer Science TUR EN

JAVA MULTITHREADED SENKRONIZASYON

Last update: 10/3/2014 6:26:00 PM

Yazan:Fatih KABAKCI

Java programlama dilinde çok kanallılık(multithreaded) programlara asenkron bir davranış getirmektedir.Çünkü farklı iki thread aynı nesne üzerinden işlem yaparken birbirlerinin ne yaptığına bakmaksızın hareket ederler.Bu noktada örneğin bir kanal bir dosyadan okuma yapıyorsa,diğeri aynı dosya üzerinde yazma yapabilir.Nitekim bu bir problemdir.

Java çok kanallı senkronizasyon problemine Monitör adında çok esnek bir çözüm yolu getirmiştir.Monitör ilk olarak C.A.R Hoare tarafından ortaya çıkarılmıştır.

Bu yönteme göre her kanal aktif olduğu sırada bir monitöre girer ve diğer tüm kanallar bu kanalın bu monitör içerisindeki görevini tamamlamasını bekler.İşi biten kanal monitörü terkeder.Bu sırada aşağıda görüldüğü gibi,bir kanalın üzerinde değişiklik yaptığı veri sadece running state üzerindeki kanal tarafından görülebilmektedir.Yani ilgili data kendi kanalına açık(public),diğerlerine korumalıdır(protected).Bu sayede senkronizasyon sağlanmış olur.
Yukarıdaki resimde de görüldüğü gibi DB adlı veritabanı o anda sadece Kanal 0 tarafından işlenmektedir.Diğer kanallar(Kanal 1,Kanal 2 ve Kanal 3) ancak Kanal 0 işlemini tamamladıktan sonra running state pozisyonuna geçebilir ve birbirleriyle mesajlaşabilir.Uyguluma aşamasında java bu problemi bir nesne ile çözmüştür.Bunun anlamı herhangi bir Monitör sınıfı yoktur.Bunun yerine her nesnenin senkronize bir metod'u çağrıldığında monitör o nesne üzerine parsellenmiş olacaktır.Senkronizasyonun dil ile tümleşik bir yapı kazanmış olması javanın gücünü bir kez daha göstermektedir.

Java programlama dilinde bu problemin çözümü synchronized anahtar sözcüğü ile sağlanmıştır.Tek bir anahtar sözcük ile kanallar arasındaki senkronizasyonun sağlanması ise Javanın gerçekten ne kadar güçlü bir dil olduğunuda ayrıca göstermektedir.Yukarıda anlatılanlara örnek olarak aşağıdaki programı inceleyelim.



Yukarıdaki programda,farklı thread'ler yaratılarak ortak bir nesne üzerinden(CallThreadSync) bir metod(enroll) çağrılmaktadır.Bu metodun yaptığı iş parametre olarak aldığı nesnenin ekranda özelliklerini bastırmaktır.Main metoduna bakıldığında ilk olarak 3 adet ThreadSync nesnesi yaratılmıştır.Bu nesneler mevcut Thread'leri aracılığıyla kanallarını başlatarak ThreadCard nesnelerini enroll metoduna aktarmaktadırlar.

enroll(ThreadCard) metodu ise almış olduğu Thread bilgisini ekranda bastırdıktan sonra kendisini 1 saniye askıya almaktadır.Daha sonra şayet başka bir thread tarafından kendisi çağrılmayacaksa,thread bilgisinin kayıt olduğunu ekranda bildirerek metodu kendisine çağıran noktaya döndürecektir.Ancak programda dikkat edilirse aynı CallThreadSynctipli olan callT nesneleri enroll'a çağrı yapmaktadır.Bunun anlamı 3 farklı thread'in aynı nesneye erişim yapmak istemesidir.Bu durumda bir kanal(thread) işini bitirmeksizin başka bir kanal için işletim sistemi tarafından kesilerek(önceliği her ne olursa olsun)CPU'u paylaştırması gerekecektir.

Yukarıdaki programın ekran çıktısından görülebileceği gibi,thread'lerin henüz kayıt işlemi bitmeksizin,CallThreadSync nesnesi diğer thread'ler için kullanılmaktadır.

Bu çıktı işlemcinizin o anda yaptığı işler ve hızına göre değişebilmektedir.

İşte aynı nesne üzerinden işlem yapan farklı kanallar ileride problem yaratabilir.Çünkü bir kanal işini bitirmeden başka bir kanalın aynı bilgiye erişmesi,çoğu zaman istediğiniz şey olmayacaktır(yukarıdaki bir durum gibi).Bu durumun çözümü daha önceden de değinildiği gibi synchronized anahtar sözcüğü ile mümkündür.Yukarıdaki aynı programın senkronizasyon yaklaşımı kullanılarak enroll metoduna synchronized anahtar sözcüğü eklenmiş hali aşağıdaki gibidir.



Bunun dışında alternatif olarak,enroll() metodunun çağrıldığı noktada da bir kapsam(scope) oluşturarak aynı program yazılabilir.Esasen bu yaklaşım bir metodun genel olarak synchronized olmasını istemediğiniz durumda,yani sadece çağırana göre,yararlı olabilir.

synchronized anahtar sözcüğünün eklenmiş haliyle oluşan yeni programın çıktısı ise aşağıdaki gibidir.

Son durumda artık nesne bulunduğu monitor içerisinde güven içinde kalacak ve bağlı olduğu thread'in işini tamamlayacağı zamana dek,başka bir kanal tarafından kullanılamayacaktır.Bu durum ise senkronizasyonu tam anlamıyla sağlamış olacaktır.
There has been no comment yet

Name:


Question/Comment
   Please verify the image




The Topics in Computer Science

Search this site for





 

Software & Algorithms

icon

In mathematics and computer science, an algorithm is a step-by-step procedure for calculations. Algorithms are used for calculation, data processing, and automated reasoning.

Programming Languages

icon

A programming language is a formal constructed language designed to communicate instructions to a machine, particularly a computer. It can be used to create programs to control the behavior of a machine. Java,C, C++,C#

Database

icon

A database is an organized collection of data. The data are typically organized to model aspects of reality in a way that supports processes requiring information.

Hardware

icon

Computer hardware is the collection of physical elements that constitutes a computer system. Computer hardware refers to the physical parts or components of a computer such as the monitor, memory, cpu.

Web Technologies

icon

Web development is a broad term for the work involved in developing a web site for the Internet or an intranet. Html,Css,JavaScript,ASP.Net,PHP are one of the most popular technologies. J2EE,Servlet, JSP,JSF, ASP

Mobile Technologies

icon

Mobile application development is the process by which application software is developed for low-power handheld devices, such as personal digital assistants, enterprise digital assistants or mobile phones. J2ME

Network

icon

A computer network or data network is a telecommunications network that allows computers to exchange data. In computer networks, networked computing devices pass data to each other along data connections.

Operating Systems

icon

An operating system is software that manages computer hardware and software resources and provides common services for computer programs. The OS is an essential component of the system software in a computer system. Linux,Windows

Computer Science

icon

Computer science is the scientific and practical approach to computation and its applications.A computer scientist specializes in the theory of computation and the design of computational systems.