isAlive and Join in java


Hôm nay chúng ta sẻ trình bày cách sử dụng 2 đối tượng isAlive method, vs Join method trong thread.

boolean isAlive()

  1. return true : Thread này đang running.
  2. return false : Thread này đang blocked or Die ( Không thể xác định được nó blocked/die 

void join()

  1. Chờ đợi cho đến khi các thread cùng join cùng chết hết rồi mới chết =]] ( Ví dụ chúng ta có 3 thread , chúng ta không xác định được ai chết trước, chết sau …nếu chúng ta join 3 thread này giống như chúng ta kết nghĩa huynh đệ , không xin cùng ngày cùng tháng cùng năm, nhưng nguyện chết cùng ngày cùng tháng cùng năm  =]] . Cả 3 sẻ được chết chung tại 1 thời điểm Cho dù 1 trong 3 xong nhiệm vụ từ rất lâu ).

Sau đây chúng ta có code như sau :

<br />
package com.gcs.demo1;

public class MyThread implements Runnable{
	int seconds; // seconds to sleep
	String name; // name's thread

	public MyThread(int seconds, String name) {		
		this.seconds = seconds;
		this.name = name;
	}

	public void run() {
		System.out.println(name + " is running ... " + seconds/1000 + " seconds");
		pause();
		System.err.println(name + " finished ... !");
	}

	private void pause(){
		try {
			Thread.sleep(seconds);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}

MainThread.java của chúng ta

</span></p>
package com.gcs.demo1;

public class MainThread {
	public static void main(String[] args) throws InterruptedException {
		Thread tA = new Thread(new MyThread(10000, "Thread A")); // run in 10 seconds
		Thread tB = new Thread(new MyThread(5000, "Thread B"));  //  run in 5 seconds
		Thread tC = new Thread(new MyThread(2000, "Thread C"));  //  run in 2 seconds

		tA.start();
		tB.start();
		tC.start();

		Thread.sleep(1000);

		// Check is alive
		System.out.println("\tThead A is alive =&gt; " + ((tA.isAlive()) ? "Running" : "Die"));
		System.out.println("\tThead B is alive =&gt; " + ((tB.isAlive()) ? "Running" : "Die"));
		System.out.println("\tThead C is alive =&gt; " + ((tC.isAlive()) ? "Running" : "Die"));

		tB.join();
		tC.join();

		// Check again
		System.out.println("\tThead A is alive =&gt; " + ((tA.isAlive()) ? "Running" : "Die"));
		System.out.println("\tThead B is alive =&gt; " + ((tB.isAlive()) ? "Running" : "Die"));
		System.out.println("\tThead C is alive =&gt; " + ((tC.isAlive()) ? "Running" : "Die"));

	}

}

Kết quả sẻ là : B and C sẻ chết cùng 1 lúc cho dù C run trong 2 seconds, nhưng vì B run trong 5 seconds nên nó củng phải chờ đến 3 seconds nửa mới die. Còn Thread A người dưng nước lả =]] sống sao chết sao thì do nó =]]

d1

Giờ chúng ta cho 3 thằng kết nghĩa luôn

tA.join();
tB.join();
tC.join();

Kết quả chúng ta củng dự đoán được 3 thằng sẻ được chết cùng nhau và sau 10 seconds làm việc vì thằng A có thể sống tới 10 seconds.
d1

Chúc các bạn thành công !!!

Leave a comment