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()
- return true : Thread này đang running.
- return false : Thread này đang blocked or Die ( Không thể xác định được nó blocked/die
void join()
- 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 => " + ((tA.isAlive()) ? "Running" : "Die")); System.out.println("\tThead B is alive => " + ((tB.isAlive()) ? "Running" : "Die")); System.out.println("\tThead C is alive => " + ((tC.isAlive()) ? "Running" : "Die")); tB.join(); tC.join(); // Check again System.out.println("\tThead A is alive => " + ((tA.isAlive()) ? "Running" : "Die")); System.out.println("\tThead B is alive => " + ((tB.isAlive()) ? "Running" : "Die")); System.out.println("\tThead C is alive => " + ((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ó =]]
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.
Chúc các bạn thành công !!!