如何在java中結(jié)合join()實(shí)現(xiàn)線程間的協(xié)作

小樊
81
2024-09-30 01:59:19

在Java中,可以使用Thread.join()方法來(lái)實(shí)現(xiàn)線程間的協(xié)作。join()方法允許一個(gè)線程等待另一個(gè)線程完成執(zhí)行。這對(duì)于確保線程按照特定的順序執(zhí)行或者在線程間共享資源時(shí)非常有用。

以下是一個(gè)簡(jiǎn)單的示例,展示了如何使用join()方法實(shí)現(xiàn)兩個(gè)線程間的協(xié)作:

public class JoinExample {

    public static void main(String[] args) {
        // 創(chuàng)建兩個(gè)線程
        Thread thread1 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 1 is running.");
                try {
                    // 讓線程1等待線程2完成
                    thread2.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 1 is finished.");
            }
        });

        Thread thread2 = new Thread(new Runnable() {
            @Override
            public void run() {
                System.out.println("Thread 2 is running.");
                // 讓線程2等待線程1完成
                try {
                    thread1.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("Thread 2 is finished.");
            }
        });

        // 啟動(dòng)線程
        thread1.start();
        thread2.start();
    }
}

在這個(gè)示例中,我們創(chuàng)建了兩個(gè)線程thread1thread2。每個(gè)線程都調(diào)用join()方法,讓當(dāng)前線程等待另一個(gè)線程完成。然而,由于線程的執(zhí)行順序是不確定的,因此這個(gè)示例可能輸出以下結(jié)果之一:

Thread 1 is running.
Thread 2 is running.
Thread 1 is finished.
Thread 2 is finished.

或者

Thread 2 is running.
Thread 1 is running.
Thread 2 is finished.
Thread 1 is finished.

總之,join()方法可以用于實(shí)現(xiàn)線程間的協(xié)作,確保線程按照特定的順序執(zhí)行。但請(qǐng)注意,線程的執(zhí)行順序仍然是不確定的,因?yàn)椴僮飨到y(tǒng)調(diào)度線程的方式是不確定的。

0