Java'da Multithreading Açıklaması [Örneklerle]

Yayınlanan: 2021-06-15

İçindekiler

Java'daki Konular

Java'daki iş parçacıkları, bir programın verimli çalışmasına yardımcı olur. Proforma yürütmenin iki temel birimi süreç ve iş parçacıklarıdır. İşlem, bir uygulama, Program veya bağımsız yürütme ortamı olabilir.

İş parçacıkları sürecinkiyle bir kaynak paylaşır ve onunla birlikte bulunur. Ana iş parçacığı adı verilen her Java uygulamasında en az bir iş parçacığı bulunur. Ana iş parçacığından birden çok iş parçacığı oluşturulabilir. Java'da nasıl iş parçacığı oluşturulacağı hakkında daha fazla bilgi edinin.

Java Thread'in Faydaları

  • Süreçlere kıyasla bir iş parçacığı oluşturmak için daha az zaman ve kaynak gerekir. Bu nedenle ipliklere hafif işlem de denir.
  • Ana işlem verileri ve kodu, iş parçacıkları tarafından paylaşılır.
  • İş parçacıkları arasındaki iletişim, bir süreçteki iletişimle karşılaştırıldığında kolaydır.
  • Java'daki iş parçacıkları, java.lang'ın uygulanması yoluyla oluşturulabilir. Çalıştırılabilir Arayüz.

Tek iplik

En küçüğüne tek iş parçacığı olarak atıfta bulunulan bir programda birkaç işlem birimi bulunur. Java, “thread class” kullanımı yoluyla threadleri uygular. İki tür iplik mevcuttur; arka plan programı iş parçacığı ve kullanıcı iş parçacığı.

Uygulama temizleneceği zaman daemon thread kullanımı ortaya çıkar. Bir uygulamanın arka planında çalışır. Uygulama ilk başladığında kullanıcı iş parçacıkları oluşturulurken.

Tek ipliğin avantajları:

  • Bir sistemde tek bir iş parçacığının yürütülmesi gerçekleştiğinden, uygulama yükü azalır.
  • Tek iş parçacığı kullanımı ile uygulamanın bakım maliyeti azalır.

Java'da çoklu görev

Çoklu görev, CPU tarafından tek seferde birden fazla görevin yürütülmesi sürecini ifade eder. Bazen, her bir programla birlikte işbirliği yapmak için kullanıcı tarafından görevler arasında CPU geçişi gerçekleştirilebilir. Çoklu görevdeki işlemlere ayrı bellek ve kaynaklar tahsis edilir. İki şekilde, çoklu görev başarılabilir.

1. Çoklu işlem (süreç tabanlı çoklu görev)

  • Her işlem için ayrı bir bellek alanı ayrılmıştır. Bu nedenle bellekte her işlem için bir adres vardır.
  • Süreçler ağırdır.
  • Süreçler arasında yüksek bir iletişim maliyeti vardır.
  • İşlemler arasında geçiş yapmak için biraz zaman gerekir. Bu, listeleri, bellek haritalarını vb. güncellemek için gereklidir.

2. Çoklu kullanım (iş parçacığı tabanlı çoklu görev)

  • Aynı adres threadler arasında paylaşılır.
  • İplikler hafiftir.
  • Dişler arasında düşük bir iletişim maliyeti vardır.

Çoklu kullanım nedir?

Bir programda aynı anda iki veya daha fazla iş parçacığı yürütüldüğünde, mekanizmaya çoklu iş parçacığı denir. Tek bir işlem, hesaplama gücünü artıran birçok iş parçacığı oluşturur. Bir programın iki veya daha fazla bölümü, CPU'nun maksimum kullanımını sağlayacak şekilde yürütülür.

İş parçacıkları, programın ayrı bölümleri olarak adlandırılır. Bir uygulamadaki işlemler, birden çok iş parçacığı veya tek iş parçacığı içerebilir.
Java Sanal Makinesi, bir uygulamanın birden çok iş parçacığına izin verir. Her iş parçacığının kendi önceliği vardır. Bu nedenle, daha düşük önceliğe sahip olanlardan daha yüksek önceliğe sahip iş parçacıklarına yürütme tercihi verilir.

Çoklu görev elde etmek için, hem çoklu okuma hem de çoklu işlem süreci kullanılır. Çoklu kullanımda paylaşılan bellek alanı kullanıldığından, çoğunlukla çoklu işleme üzerinde kullanılır. Bellek, ekstra bellek tahsisi gerekmediğinden kaydedilir. Ayrıca, iş parçacıkları arasında bağlam değiştirme meydana geldiğinden, geçen süre çoklu işlemden daha azdır.

Animasyonda, oyunlarda, Java multithreading kullanılır. Java mimarisi ve bileşenleri hakkında daha fazla bilgi edinmek istiyorsanız tıklayın.

İplik oluşturmak için iki Mekanizma kullanılabilir.

1. İplik sınıfı uzantısı

2. Çalıştırılabilir Arayüz uygulaması

İş parçacığı Sınıfı ve Çalıştırılabilir Arayüz

  • Java'da çoklu kalıtım desteklenmediğinden, "Thread sınıfının" genişletilmesi diğer sınıfları genişletemez. Ancak “Runnable” arabiriminin uygulanmasıyla, sınıftan diğer temel sınıflar genişletilebilir.
  • Bir iş parçacığının temel işlevselliği, kesme(), verim(), vb. gibi yerleşik yöntemler sağlandığı için Thread sınıfını genişleterek genişletilebilir.
  • Runnable kullanıldığında, birden çok iş parçacığının paylaşabileceği bir nesne sağlanacaktır.

Java Konu sınıfı

Java'da iş parçacığı programlama, iş parçacığı sınıfı aracılığıyla elde edilir. Yapıcılar, iş parçacığı işlemlerini gerçekleştirmek için iş parçacığı sınıfı ve yöntemleri tarafından sağlanır. Bir iş parçacığı sınıfı, çalıştırılabilir bir arabirim uygular ve Object sınıfını genişletir.

Kullanılan birkaç yaygın iş parçacığı yöntemi şunlardır:

  1. start(): İş parçacığı yürütme bu yöntemle başlatılır. run() yöntemi JVM tarafından çağrılır.
  2. uyku(int milisaniye): Bu yöntem ile iş parçacığı işlemi uykuya alındığından sağlanan milisaniye boyunca iş parçacığının yürütülmesi duraklatılır. Duraklamadan sonra, iş parçacığının yürütülmesi yeniden başlar. Konular bu yöntemle senkronize edilebilir.
  3. getName(): İş parçacığı adı bu yöntemle döndürülür.
  4. setPriority(int yeni öncelik): İş parçacığı önceliği bu yöntemle değiştirilir.
  5. verim (): Mevcut iş parçacığı, bu yöntemle diğer iş parçacıklarının yürütülmesiyle durdurulur.
  6. run(): Yöntem, iş parçacığında bir eylem başlatmak içindir.
  7. getPriority(): Bu yöntem kullanılarak iş parçacığı önceliği döndürülür.
  8. setName(): İş parçacığı adı bu yöntemle değiştirilir.
  9. getId(): İş parçacığı kimliği bu yöntemle döndürülür.
  10. suspend(): İş parçacığı bu yöntemle askıya alınır.

İş parçacığı yaşam döngüsü

İş parçacığı yaşam döngüsü, aşağıda listelenen çeşitli aşamalara sahiptir:

  1. Yeni: Bu aşamada bir thread oluşturmak için “Thread class” kullanılır. Konu başlayana kadar program bu aşamada kalır. Yöntem aynı zamanda doğan iş parçacığı olarak da adlandırılır.
  2. Çalıştırılabilir: Başlatma yöntemi, iş parçacığı yaşam döngüsünün bu aşamasında iş parçacığı örneğini çağırır. Zamanlayıcı, yürütmeyi bitirmek için iş parçacığının kontrolü ile birlikte teslim edilir. İş parçacığının yürütülüp yürütülmeyeceği, zamanlayıcıya bağlıdır.
  3. Koşu: İş parçacığının yürütülmesi başlatıldığında, aşama “çalışıyor” aşamasına kaydırılır. İş parçacığı havuzundan zamanlayıcı tarafından bir iş parçacığı seçilir ve uygulamanın yürütülmesini başlatır.
  4. Waiting : Adından da anlaşılacağı gibi, yaşam döngüsünün bu aşamasında iş parçacığı bekler. Bir uygulamada birden çok iş parçacığının çalışması nedeniyle iş parçacığı senkronizasyonu gereklidir. Bu nedenle, bir iş parçacığının diğer iş parçacığının yürütülmesi bitene kadar beklemesi gerekliliği vardır. Bu nedenle yaşam döngüsünün aşaması bekleme aşaması olarak da bilinir.
  5. Ölü: İpliğin sonlandığı aşamaya “ölü” aşama denir. İş parçacığı çalışmadan işlemenin sonuna aktarıldığında sonlandırılır ve bu nedenle “ölü durumda” olur.

Java'da Konu Senkronizasyonu

Çoklu kullanım durumunda bir programda zaman uyumsuz davranış oluşur. Sözde veriler bir iş parçacığı üzerinden yazılır ve verilerin okunması aynı anda başka bir iş parçacığı tarafından yapılırsa uygulamada tutarsızlık oluşabilir.

Konular arasında paylaşılan kaynaklara diğer iş parçacıkları tarafından erişilmesi gerekir. Bu nedenle, bu gibi durumlarda, senkronizasyon yaklaşımına yaklaşılır. Senkronizasyon davranışını elde etmek için Java'da senkronize yöntemler mevcuttur.

Bir iş parçacığı senkronize bloğa ulaştığında, ulaştığında, yöntem aynı nesne üzerindeki diğer iş parçacıkları tarafından çağrılamaz. İş parçacığı bloğu yürütmeyi bitirip ondan çıkana kadar, diğer iş parçacıklarının durması ve beklemesi gerekir.

Dünyanın En İyi Üniversitelerinden Online Yazılım Kursları Öğrenin . Kariyerinizi hızlandırmak için Yönetici PG Programları, Gelişmiş Sertifika Programları veya Yüksek Lisans Programları kazanın.

Çoklu İş Parçacığının Avantajları

  • Aynı anda birden fazla işlem gerçekleştirilebilir. Bağımsız iş parçacıkları çalışırken, kullanıcı engellenmez.
  • Birden çok işlem birlikte çalıştığı için zamandan tasarruf edilir.
  • Bir iş parçacığı bağımsız olduğu için başka bir iş parçacığından etkilenemez. Bir iş parçacığında bir istisnanın ortaya çıkması, diğer iş parçacıklarının yürütülmesini etkilemez.

Çoklu kullanım örneği

Java'da çok iş parçacıklı bir program örneği aşağıda gösterilmiştir:

Kaynak

Şekil 1: Çok iş parçacıklı kod örneğinin bir parçası

kod açıklaması

Satır 3: “GuruThread1” sınıfı çalıştırılabilir uygular.

Satır 8: Sınıfın ana yöntemini görüntüler.

Satır 9: İş parçacığı sınıfı somutlaştırılır ve bir "guruThread1" örneği oluşturulur ve bir iş parçacığı oluşturulur.

Satır 10: "Thread sınıfı" somutlaştırılır ve bir "guruThread2" örneği ve bir iş parçacığı oluşturulur.

Satır 11: guruThread1 adlı konu başlatılır.

Satır 12: guruThread2 adlı konu başlatılır.

Satır 13: “İş parçacığı adları takip ediyor:” metni çıktı.

Satır 14: thread1 adını almak için getName() yöntemi kullanılır.

Satır 15: thread2 adını almak için getName() yöntemi kullanılır.

Yukarıdaki kodun yürütülmesi aşağıdaki çıktıyla sonuçlanır:

Kaynak

Şekil: Java'daki çoklu iş parçacığı programından oluşturulan çıktının ekran görüntüsü (

Çözüm

Makale, Java'da çoklu kullanım programı örneği ile birlikte Java'da çoklu kullanım kavramını tartıştı . Öğrenmeniz burada bitmiyor ve Java'nın diğer tüm temel kavramlarıyla iyi geçiniyor.

Programlama becerilerinizde uygun bir fiyata uzmanlaşmak ve kendinizi sektöre hazır hale getirmek istiyorsanız, upGrad “Bilgisayar Biliminde Yüksek Lisans” kursuna göz atabilirsiniz. 21 ila 45 yaş arasındaki tüm orta düzey profesyoneller içindir. Kurs, Liverpool John Moores Üniversitesi tarafından onaylanmıştır ve sizden en iyi şekilde yararlanmak için 500 saatten fazla öğrenme, 309 proje ve ödev ile tasarlanmıştır. Herhangi bir sorunuz varsa bize bir mesaj bırakın, ekibimiz sizinle iletişime geçecektir.

Hayalinizdeki İşe Yer Açın

IIIT-B'den Yazılım Geliştirmede Yönetici PG Programına Başvurun