Hàm Java Thread join sử dụng để chạy thread hiện tại đến khi kết thúc, thì các thread khác mới chạy được. Có 3 hàn join overloaded
public final void join(): Hàm java thread join này dùng để chạy thread hiện tại đến hết luồng, thì các thread khác mới chạy được. Nếu thread bị ngắt quãng thì sẽ quăng lỗi InterruptedException.
public final synchronized void join(long millis): Hàm java thread join này dùng để chạy thread hiện tại hết khi hết luồng hoặc hết thời gian chỉ định bằng tham số được truyền vào 1/1000 giây (số truyền vào phải là số dương). Vì thời gian thực thi dựa theo hệ điều hành, nên sẽ không đảm bảo rằng thread hiện tại sẽ đợi chính xác tuyệt đối với thời gian truyền vào.
public final synchronized void join(long millis, int nanos): Hàm java thread join này dùng để chạy thread hiện tại hết khi hết luồng hoặc hết thời gian chỉ định bằng tham số được truyền vào 1/1000 giây và 1/ tỉ giây (2 tham sô này phải là số dương).
Dưới đây là ví dụ về hàm Thread Join. Mục đích của hàm này là: để chắc rằng tất cả các thread đều chạy hoàn tất và thread thứ 3 bắt đầu khi thread thứ 1 kết thúc.
Kết quả của chương trình trên:
Java Thread Join
public final synchronized void join(long millis): Hàm java thread join này dùng để chạy thread hiện tại hết khi hết luồng hoặc hết thời gian chỉ định bằng tham số được truyền vào 1/1000 giây (số truyền vào phải là số dương). Vì thời gian thực thi dựa theo hệ điều hành, nên sẽ không đảm bảo rằng thread hiện tại sẽ đợi chính xác tuyệt đối với thời gian truyền vào.
public final synchronized void join(long millis, int nanos): Hàm java thread join này dùng để chạy thread hiện tại hết khi hết luồng hoặc hết thời gian chỉ định bằng tham số được truyền vào 1/1000 giây và 1/ tỉ giây (2 tham sô này phải là số dương).
Dưới đây là ví dụ về hàm Thread Join. Mục đích của hàm này là: để chắc rằng tất cả các thread đều chạy hoàn tất và thread thứ 3 bắt đầu khi thread thứ 1 kết thúc.
package com.journaldev.threads;
public class ThreadJoinExample {
public static void main(String[] args) {
Thread t1 = new Thread(new MyRunnable(), "t1");
Thread t2 = new Thread(new MyRunnable(), "t2");
Thread t3 = new Thread(new MyRunnable(), "t3");
t1.start();
//start second thread after waiting for 2 seconds or if it's dead
try {
t1.join(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
t2.start();
//start third thread only when first thread is dead
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
t3.start();
//let all threads finish execution before finishing main thread
try {
t1.join();
t2.join();
t3.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("All threads are dead, exiting main thread");
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("Thread started:::"+Thread.currentThread().getName());
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread ended:::"+Thread.currentThread().getName());
}
}
public class ThreadJoinExample {
public static void main(String[] args) {
Thread t1 = new Thread(new MyRunnable(), "t1");
Thread t2 = new Thread(new MyRunnable(), "t2");
Thread t3 = new Thread(new MyRunnable(), "t3");
t1.start();
//start second thread after waiting for 2 seconds or if it's dead
try {
t1.join(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
t2.start();
//start third thread only when first thread is dead
try {
t1.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
t3.start();
//let all threads finish execution before finishing main thread
try {
t1.join();
t2.join();
t3.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("All threads are dead, exiting main thread");
}
}
class MyRunnable implements Runnable{
@Override
public void run() {
System.out.println("Thread started:::"+Thread.currentThread().getName());
try {
Thread.sleep(4000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread ended:::"+Thread.currentThread().getName());
}
}
Kết quả của chương trình trên:
Thread started:::t1
Thread started:::t2
Thread ended:::t1
Thread started:::t3
Thread ended:::t2
Thread ended:::t3
All threads are dead, exiting main thread
Thread started:::t2
Thread ended:::t1
Thread started:::t3
Thread ended:::t2
Thread ended:::t3
All threads are dead, exiting main thread
0 comments:
Post a Comment