Java Multithreading Kullanımı – Tasarım Kodlama
Java

Java Multithreading Kullanımı

Herhangi bir uygulamada birden fazla işlem olabilir (örnekler). Bu işlemin her biri, tek bir iş parçacığı veya birden çok iş parçacığı olarak atanabilir.

Bu yazıda aynı anda birden fazla görevi nasıl gerçekleştireceğimizi ve aynı zamanda bu görevler arasındaki senkronizasyon hakkında daha fazla bilgi öğreneceğiz.

Single Thread Nedir?

Bir “single thread”, temel olarak hafif ve en küçük işlem birimidir. Java, bir “Thread Class” kullanarak bunu kullanır.

İki tip thread vardır – user thread ve daemon thread (uygulamayı temizlemek istediğimizde arka planda kullanılan daemon thread‘leri arka planda kullanılır).

Bir uygulama ilk başladığında, kullanıcı iş parçacığı oluşturulur. Post, birçok kullanıcı ve daemon thread yaratabiliriz.

Single Thread Örneği:

Single Thread avantajları:

  • Uygulamada genel giderimi sistemde tek iş parçacığı yürütürken azaltır
  • Ayrıca, uygulamanın bakım maliyetini düşürür.

Multithreading Nedir?

Java’da çoklu thread, maksimum CPU kullanımıyla aynı anda iki veya daha fazla iş parçacığı yürütme işlemidir.

Çok iş parçacıklı uygulamalar, iki veya daha fazla iş parçacığının aynı anda çalıştığı yerlerdir; Bu nedenle, Java’da eşzamanlılık olarak da bilinir. Bu çoklu görev, birden fazla işlem CPU, bellek vb. ortak kaynakları paylaştığında yapılır.

Herthread birbirine paralel olarak ilerler. Threadler ayrı bellek alanı ayırmaz; dolayısıyla hafızayı korur. Ayrıca, threadler arasında bağlam değişimi daha az zaman alır.

Multithreading Örneği:

Çoklu thread avantajları:

  • Kullanıcılar engellenmez, çünkü iş parçacıkları bağımsızdır ve zaman zaman birden fazla işlem yapabiliriz
  • Bu threadler bağımsız olduğu için, bir iş parçacığı bir istisna ile karşılaşırsa, diğer iş parçacıkları etkilenmez.

Java’da iş parçacığı yaşam döngüsü

Thread ömrünün çeşitli aşamaları, yukarıdaki diyagramda gösterildiği gibidir:

  1. New
  2. Runnable
  3. Running
  4. Waiting
  5. Dead
  1. New: Bu aşamada, konu “Thread sınıfı” sınıfı kullanılarak yaratılır. Program threadi başlayana kadar bu durumda kalır. Ayrıca doğuştan thread olarak da bilinir.
  2. Runnable: Bu bölümde, iş parçacığının örneği bir start yöntemiyle çağrılır. Thread kontrolü, çalışmayı bitirmesi için programlayıcıya verilir. İş parçacığının çalıştırılıp çalıştırılmayacağı zamanlayıcıya bağlıdır.
  3. Running: İş parçacığı yürütmeye başladığında, durum “Running-Çalışan” durumuna değiştirilir. Zamanlayıcı, iş parçacığı havuzundan bir iş parçacığı seçer ve uygulamada çalışmaya başlar.
  4. Waiting: Bir iş parçacığının beklemesi gereken durum budur. Uygulamada birden fazla iş parçacığı bulunduğundan, iş parçacığı arasında eşitlemeye ihtiyaç vardır. Bu nedenle, bir iş parçacığı diğer iş parçacığı işlenene kadar beklemek zorundadır. Dolayısıyla bu duruma bekleme durumu denir.
  5. Dead: Bu, iş parçacığının sonlandırıldığı durumdur. İş parçacığı çalışıyor durumda ve işleme tamamlanır tamamlanmaz “dead state” durumuna geçer.

Threadler için yaygın olarak kullanılan yöntemlerden bazıları şunlardır:

Method
Tanımı
start()Bu yöntem iş parçacığının yürütülmesini başlatır ve JVM iş parçacığı üzerinde run() yöntemini çağırır.
Sleep(int millisecond)Bu yöntem iş parçacığının uyku moduna geçmesini sağlar, böylece iş parçacığının çalışması sağlanan milisaniye için duraklar ve bundan sonra iş parçacığı çalışmaya başlar. Bu konuların senkronizasyonunda yardımcı olur.
getName()Thread ismini döndürür.
setPriority(int newpriority)Thread önceliğini değiştirir.
yield()Durmadaki mevcut thread ve diğer threadin yürütülmesine neden olur.

Örnek: Bu örnekte bir iş parçacığı yaratacağız ve iş parçacığı için kullanılabilir yerleşik yöntemleri inceleyeceğiz.

Çıktı:

java thread örnekleri

java thread örnekleri

Java Thread Senkronizasyonu

Multithreading’de, programların zaman uyumsuz davranışı var. Bir iş parçacığı bazı verileri ve aynı anda okuyan başka bir iş parçacığı yazıyorsa, uygulamada tutarsızlık oluşturabilir.

Paylaşılan kaynaklara iki veya daha fazla iş parçacığıyla erişilmesi gerektiğinde, eşitleme yaklaşımı kullanılır.

Java, senkronize davranışı uygulamak için senkronize metotlar kullanılır.

Bu yaklaşımda, iş parçacığı senkronize bloğun içine ulaştığında, o zaman aynı nesne üzerinde başka hiçbir iş parçacığı bu yöntemi çağıramaz. Tüm threadler, o iş parçacığının senkronize edilmiş bloğu bitirmesini ve çıkmasını beklemek zorundadır.

Bu şekilde, senkronizasyon çok iş parçacıklı bir uygulamada yardımcı olur. Bir iş parçacığının diğer iş parçacığı yürütmesini bitirene kadar beklemesi gerekir, sonra diğer iş parçacığı yürütmeye izin verilir.

Aşağıdaki biçimde yazılabilir:

 

Örnek 1: Java Multi Threading Örneği

Bu örnekte, iki thread oluşturup ve thread isimlerini alacağız.

Örnek 2:

Bu örnekte, çalıştırılabilir bir arabirimin run() ve start() yöntemini geçersiz kılma yöntemlerini ve bu sınıfın iki iş parçacığını oluşturup bunları uygun şekilde çalıştıracağız.

Çıktı:

java thread örnekleri

java thread örnekleri

Özet:

Bu yazıda, Java’da çok iş parçacıklı uygulamalar ve tekli ve çoklu evrelerin nasıl kullanılacağını gördük.

Çok iş parçacıklı olarak, kullanıcılar iş parçacığı bağımsız olduğundan engellenmez ve aynı anda birden çok işlem gerçekleştirebilir
Thread kullanım ömrünün çeşitli aşamaları olduğunu ve aşağıdaki gibi olduğunu öğrendik.,

  • New
  • Runnable
  • Running
  • Waiting
  • Dead

Ayrıca, uygulamanın sorunsuz çalışmasına yardımcı olan iş parçacıkları arasındaki senkronizasyon hakkında da bilgi edindik.
Çoklu okuma çok daha fazla uygulama görevini kolaylaştırır.

 

Yorum bırak