Java’da Multithreading join() ve isAlive() kullanımı

ilyasaglar tarafından tarihinde yayınlandı

Thread de join methodu, bir thread işlemini bitirmeden diğer bir thread çalışması engellenir. Eşzamanlı birden fazla thread in iş yapması önlenmiş olur.

4 tane thread olsun, burada 1.thread çalıştıktan sonra, thread1.join() yaparak 1.thread bitmeden 2.thread e geçmeyecektir. 1. Thread çalışması bitince 2. thread çalışır ve biter. Sonra 3. başlar ama daha 3. thread bitmeden hemen 4. thread de peşine başlar beklemeden. Bu thread güvenliğini sağlıksız olmasına neden olabilir.

 

Thread isAlive methodu, bir thread’in çalışıp çalışmadıgını kontrol edip; true-false olarak değer verir

 

ÖRNEK SORU:

Main içinde 1 adet thread oluşturun.

start sonrası main desin ki:
“thread 1 oluşturuldu”

Thread 5-15sn arası random sleep yapsın. Ve ardından 
“bana müsade (thread 1) ” şeklinde mesaj vererek sonlansın.

Main metodu, çalışması sonlanan thread’i 1 sn içinde farkederek 
onu uğurlasın: “thread 1! yolun açık olsun”

3 thread oluşturan ve bunları takip eden versiyonu yazalim.

 

 

CEVAP: 

 

import java.io.FileWriter;
import java.io.IOException;

class IsParcaciklari extends Thread {

public void run() {
Thread thread = Thread.currentThread();
System.out.println(thread.getName() + ” oluşturuldu”);
processmessage();
System.out.println(“bana müsaade ” + thread.getName());

}

private void processmessage() {
try {
double random = Math.floor(Math.random() * (15000 – 5000 + 1) + 5000);
System.out.println(“uyuma süresi : ” + random);
Thread.sleep((long) random);

} catch (InterruptedException e) {
e.printStackTrace();
}
}

}

public class Test {

public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
IsParcaciklari thread0 = new IsParcaciklari();
Thread thread = Thread.currentThread();

IsParcaciklari thread1 = new IsParcaciklari();
thread1.start();
thread1.join();
if (!thread1.isAlive()) {
System.out.println(thread1.getName() + “! yolun açık olsun \n”);
}

IsParcaciklari thread2 = new IsParcaciklari();
thread2.start();
thread2.join();
if (!thread2.isAlive()) {
System.out.println(thread2.getName() + “! yolun açık olsun \n”);
}

IsParcaciklari thread3 = new IsParcaciklari();
thread3.start();
thread3.join();
if (!thread3.isAlive()) {
System.out.println(thread3.getName() + “! yolun açık olsun \n”);
}

System.out.println(“Tüm threadler uğurlandı!”);

}

}

 

EKRAN ÇIKTILARI:

join() kullanımı ile ekran çıktısı

join() kullanılmadan ekran çıktısı


0 yorum

Bir cevap yazın

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