Twitter Youtube Github
Burak Kutbay'ın Kişisel Blog'u |

Type and hit Enter to search

  • Eğitim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • Java Server Pages
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • Java 8
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale
Java

Java’da Multithreading ( Thread Safety synchronized intrinsic lock ) – 3

Paylaş

Önceki yazımda (buradan ulaşabilirsiniz) Thread’lerin yaşam döngüsünden bahsettim. Bu yazıda synchronized nedir? Java’da thread işlemlerinde synchronized nasıl yapılır örneklerle anlatacağım.

İçindekiler

  • synchronized

Programımızdaki işlemlerin thread sırasında iş önceliğinin rastgele olması ve değerlerin sıralı ya da senkronize olarak çalışmaması sorununu “synchronized” anahtar kelimesi ile nasıl çözeceğimizden bahsedeceğim.

Problemi anlamak için bir örnek yapalım ve bu örnekte bir senkron problemi olacaktır. Bir sayacımız olacak ve ilk önce ilk thread’imize 10 sayısını vereceğiz ve 15’e kadar saydıracağız. Sonraki thread’imize 500 vereceğiz ve bu işlemde de 505’e kadar saymasını isteyen kodumuzu yazıyoruz.

class Count
{
    void print(int n) throws InterruptedException {
        for(int i=1;i<=5;i++)
        {
            System.out.println(n++);
            Thread.sleep(500);
        }

    }
}

class MyThread1 extends Thread
{
    Count count;
    MyThread1(Count count)
    {
        this.count = count;
    }
    public void run()
    {
        try {
            count.print(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}
class MyThread2 extends Thread
{
    Count c;
    MyThread2(Count c)
    {
        this.c=c;
    }
    public void run()
    {
        try {
            c.print(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public class Main
{
    public static void main(String args[])
    {
        Count obj = new Count();
        MyThread1 t1=new MyThread1(obj);
        MyThread2 t2=new MyThread2(obj);
        t1.start();
        t2.start();
    }
}Code language: JavaScript (javascript)

Çıktımıza bakalım.

10
500
501
11
12
502
13
503
504
14

Yukarıdaki çıktıdan anlayacağınız üzere arttırma işlemine threadden gelen iş parçacıklarının rastgele geldiğini görebilmekteyiz.

Thread’lerin verdiğimiz sıraya göre çalışmasını yani o threaddeki işlemin bittiğinden emin olduktan sonra diğer thread’deki işlemlerin çalışmasını istersek;

synchronized


synchronized ananhtar kelimesi, senkronize olarak çalışmasını istedğimiz kod bloğunun önüne koyduğumuz zaman çözülür. Yaptığımız örnekte sayacımızı arttıran metodun senkronize olarak çalışmasını istiyoruz ve bir thread’deki iş parçacığı bitmeden diğerinin başlamayacağını garanti eder.

class Count
{
  synchronized   void print(int n) throws InterruptedException {
        for(int i=1;i<=5;i++)
        {
            System.out.println(n++);
            Thread.sleep(500);
        }

    }
}

class MyThread1 extends Thread
{
    Count count;
    MyThread1(Count count)
    {
        this.count = count;
    }
    public void run()
    {
        try {
            count.print(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

}
class MyThread2 extends Thread
{
    Count c;
    MyThread2(Count c)
    {
        this.c=c;
    }
    public void run()
    {
        try {
            c.print(500);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

public class Main
{
    public static void main(String args[])
    {
        Count obj = new Count();
        MyThread1 t1=new MyThread1(obj);
        MyThread2 t2=new MyThread2(obj);
        t1.start();
        t2.start();
    }
}

Çıktımız

10
11
12
13
14
500
501
502
503
504

Anahtar kelime sayesinde sorunumuz çözüldü.

intrinsic lock ederek yani synchronized ederek bir threadin işi varken diğer thread’leri bekletir.

Tags:

java synchronizedsynchronized örnekthread java

Paylaş

Diğer Yazılar

Java Multithreading Nedir
Previous

Java’da Multithreading ( Yaşam Döngüsü ve States ) – 2

Java Multithreading Nedir
Next

Thread ve Process Arasındaki Farklar

Next
Java Multithreading Nedir
29 Aralık 2021

Thread ve Process Arasındaki Farklar

Previews
28 Aralık 2021

Java’da Multithreading ( Yaşam Döngüsü ve States ) – 2

Java Multithreading Nedir

No Comment! Be the first one.

Bir cevap yazın Cevabı iptal et

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

İlgini Çekebilir

Java Multithreading Nedir

Java’da Multithreading (Thread ve Runnable) – 1

Burak Kutbay'ın Kişisel Blog'u |

© 2008 - ∞, Her hakkı saklıdır.

Link

  • Hakkımda
  • İletişim
  • Arşiv

Kategori

Cloud
Amazon Web Services
Vue.js
Gradle
Node.js
Android
Struts
Röportaj
Spring Cloud Stream
Redis
Debezium
XCode
Video
Spring Native
Mikroservis Mimarisi
iPhone Uygulama Geliştirme
MongoDB
PostgreSQL
Spring Security
JPA
Objective C
Spring Data
Apache Kafka
Git
Servlet
Yaptığım Projeler
Maven
Design Patterns
DevOps
Linux
JDBC
RabbitMQ
PrimeFaces
Spring Jdbc Template
Spring
Google
Manset
Spring MVC
Spring Cloud
OCA Java SE 8
Spring Core
Quarkus
Microsoft
Veritabanı
Java SE
Tanıyalım
Hibernate
Teknoloji
Okuduğum Kitaplar
Java Server Faces
Yazılım Mühendisliği
C Sharp
Spring Boot
Java
Günlüğüm
Java Server Page
Makale

Takip Et

Twitter Youtube Github
  • Eğitim
  • Quarkus
  • Spring Cloud
  • Spring Boot
  • Spring JDBC Template
  • Spring MVC
  • RabbitMQ
  • Hibernate
  • Java Server Pages
  • Java Server Faces
  • PrimeFaces
  • Servlet
  • JDBC
  • JSTL
  • Java 8
  • / Diğer
    • Ünlü Bilişimciler
    • C Sharp
    • Kütüphane
    • Makale