300x250 AD TOP

Thank you so much for taking the time for sharing your knowledge with me

Powered by Blogger.

Thursday, August 16, 2018

Tagged under:

Java Thread Join

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

Java Thread Join


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.


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());
    }
    
}



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





0 comments:

Post a Comment