www.fatihkabakci.com

Personal Website and Computer Science TUR EN

JAVA CONCURRENT ATOMIC

Last update: 12/14/2014 2:48:00 AM

Yazan:Fatih KABAKCI

Java eş zamanlılık(concurrency) araçlarından bir tanesi olan atomic(atomikler) birden fazla thread arasında paylaşılan tek bir verinin, herhangi bir lock(kilit) mekanizması kullanılmaksızın, verinin senkronizasyonu' nu sağlar. Atomik Fen Bilimlerinde 'bölünemez' anlamına gelir. Java Programlama Dilinde de atomik işlemler paylaşılan veri kaynağının okunması ve yazılması işlemlerini bir tutar. Okuma ve yazma tek bir işlemdir ve bölünemez. java.util.concurrent.atomic paketi de veriyi bu şekilde yöneterek senkronizasyonu sağlar. Bu durum farklı thread' ler arasında paylaşılan verinin tutarsız kalma durumuna engel olur.

Atomic kavramını daha iyi anlamak için aşağıdaki örneği inceleyelim.

Bir yardım kampanyası kapsamında para bağışı yapıldığını düşünelim. Bir takım hayır sever insanların yardımda bulunarak para toplamak istemekte. Bu hayır sever insanların her biri bunu yaparken de toplanan paranın miktarı ile ilgilenmeyip, sadece bütçesine uygun yardım talebinde bulunmak istemekte. O halde bu yardım zincirini atomikler ile senkronize edersek aşağıdaki gibi bir program yazılabilir.

Benefactor Sınıfı

package Concurrent.Atomic;

/**
 * @author www.fatihkabakci.com
 */
public class Benefactor implements Runnable {

   String name;
   Long   donationMoney;

   public Benefactor(String name, Long donationMoney) {
      this.name = name;
      this.donationMoney = donationMoney;
      new Thread(this).start();
   }

   @Override
   public void run() {
      System.out.printf("[NEW DONATE]: Accumulated sum:%s %s donates %d\n", MoneyBox.sum.getAndAdd(donationMoney), name, donationMoney);
   }
}

MoneyBox Sınıfı

package Concurrent.Atomic;

import java.util.concurrent.atomic.AtomicLong;

/**
 * @author www.fatihkabakci.com
 */
public class MoneyBox {
   public static AtomicLong sum = new AtomicLong(0);
}

Donation Main Sınıfı

package Concurrent.Atomic;

/**
 * 
 * @author www.fatihkabakci.com
 * This class shows that how java atomic objects work
 *
 */
public class Donation {
   public static void main(String[] args) {
      System.out.println("Current:" + MoneyBox.sum);
      
      new Benefactor("Mehmet", 20L);
      new Benefactor("Ayşe", 15L);
      new Benefactor("Veli", 30L);
      new Benefactor("Onur", 5L);
      
      while(Thread.activeCount() > 1);
      System.out.println("Accumulated Sum:" + MoneyBox.sum);
   }
}

Yukarıdaki programda, java.util.concurrent.atomic nesnelerinden biri olan AtomicLong sınıfı kullanılmıştır. Bu sınıf paylaşılan veri kaynağı olarak basitçe bir para kutusunu modeller. Her bağış yapan kimse(benefactor), bu sınıfın getAndAdd() metodunu kullanarak bir önceki meblağı alır ve üstüne kendi bağışlamayı istediği tutarı ekler. Buradaki 'get' ve 'add' işlemleri birleştirilerek atomik bir hale getirilir. Yani get(alma) ve add(ekleme) işlemleri ayrılamaz bir bütündür. Aksi halde bir thread get işlemi sırasında suspend moduna geçebilir ve add işleminde resume moduna geçtiğinde veride çeşitli tutarsızlıklar görülebilir(Bu örnek için tutarsızlıklar önemli değildir).

Atomic nesneleri Sql mimarisindeki Transaction' lara benzer. Yapılan her işlem birer bütündür ve ayrılamaz. Bu yaklaşımda paylaşılan veriyi kullanan her bir thread için senkronizasyon sağlar.



İlgili Yazılar:

Java Thread

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.