Trang chủHướng dẫnVí dụ về phương thức join trong Java Thread
Java

Ví dụ về phương thức join trong Java Thread

CyStack blog 2 phút để đọc
CyStack blog01/08/2025
Locker Avatar

Bao Tran

Web Developer

Locker logo social
Reading Time: 2 minutes

Phương thức join trong Java Thread có thể được sử dụng để tạm dừng việc thực thi của thread hiện tại cho đến khi thread được chỉ định kết thúc. Có ba phiên bản của phương thức join.

phương thức join trong Java Thread

Phương thức join trong Java Thread

  • **public final void join():**Phương thức join() này trong Java khiến luồng hiện tại phải chờ cho đến khi luồng mà nó gọi join()được gọi lên kết thúc. Nếu luồng bị ngắt trong quá trình chờ, nó sẽ ném ra ngoại lệ InterruptedException.
  • public final synchronized void join(long millis): Phương thức join(long millis) được dùng để yêu cầu luồng hiện tại chờ cho đến khi luồng được gọi kết thúc hoặc hết thời gian chờ đã chỉ định tính bằng mili-giây. Tuy nhiên, do việc thực thi luồng phụ thuộc vào cách hệ điều hành triển khai, nên không có gì đảm bảo rằng luồng hiện tại sẽ chỉ chờ đúng khoảng thời gian đã chỉ định.
  • public final synchronized void join(long millis, int nanos): Phương thức join(long millis, int nanos) cho phép luồng hiện tại chờ đến khi luồng mục tiêu kết thúc hoặc sau khoảng thời gian tính bằng mili-giây cộng với nano-giây đã chỉ định.

Dưới đây là một ví dụ đơn giản minh họa cách sử dụng các phương thức Thread.join. Mục tiêu của chương trình là đảm bảo luồng main là luồng kết thúc sau cùng, và luồng thứ ba chỉ bắt đầu khi luồng đầu tiên đã 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ả đầu ra của chương trình trên là:

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

Đó là tất cả phần tóm lược nhanh về ví dụ sử dụng phương thức join trong Java thread.

0 Bình luận

Đăng nhập để thảo luận

Chuyên mục Hướng dẫn

Tổng hợp các bài viết hướng dẫn, nghiên cứu và phân tích chi tiết về kỹ thuật, các xu hướng công nghệ mới nhất dành cho lập trình viên.

Đăng ký nhận bản tin của chúng tôi

Hãy trở thành người nhận được các nội dung hữu ích của CyStack sớm nhất

Xem chính sách của chúng tôi Chính sách bảo mật.

Đăng ký nhận Newsletter

Nhận các nội dung hữu ích mới nhất