教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

join()方法實(shí)現(xiàn)線程插隊(duì)

更新時(shí)間:2022年03月02日17時(shí)41分 來源:傳智教育 瀏覽次數(shù):

現(xiàn)實(shí)生活中經(jīng)常能碰到“插隊(duì)”的情況,同樣,在Thread 類中也提供了一個join()方法來實(shí)現(xiàn)這個“功能”。當(dāng)在某個線程中調(diào)用其他線程的join()方法時(shí),調(diào)用的線程將被阻塞,直到被join()方法加入的線程執(zhí)行完成后它才會繼續(xù)運(yùn)行。接下來通過一個案例來演示join()方法的使用,如下所示。

class EmergencyThread implements Runnable {
    public void run() {
        for (int i = 1; i < 6; i++) {
            System.out.println(Thread.currentThread().getName()
             + "輸入:”+i);
            }
        }
    }
    public class Examplel0 {
        public static void main(String[] args) throws InterruptedException {
            //創(chuàng)建線程
            Thread threadl = new Thread(new EmergencyThread(), "threadl");
            threadl.start(); //開啟線程
            for (inc i = 1; i < 6; i++) {
                System.out.println(Thread.currentThread().getName() + ”輸入:” + i);
                    if (i == 2) {
                        threadl.join(); //調(diào)用join()方法
                    }
                }
            }
        }
運(yùn)行結(jié)果如圖所示。

例10-10中,在main線程中開啟了一個線程thread1,這兩個線程會相互爭奪CPU使用權(quán)輸出語句。當(dāng)main線程中的循環(huán)變量為2時(shí),調(diào)用thread1線程的join()方法,這時(shí),thread1線程就會“插隊(duì)”優(yōu)先執(zhí)行,并且整個程序執(zhí)行完畢后才會執(zhí)行其他線程。從運(yùn)行結(jié)果可以看出,當(dāng)main線程輸出2以后,thread1線程就開始執(zhí)行,直到執(zhí)行完畢,main線程才繼續(xù)執(zhí)行。

Thread類中除了提供一個無參數(shù)的線程插隊(duì)join()方法外,還提供了帶有時(shí)間參數(shù)的線程插隊(duì)方法join(long millis)。當(dāng)執(zhí)行帶有時(shí)間參數(shù)的join(long millis)進(jìn)行線程插隊(duì)時(shí),必須等待插入的線程指定時(shí)間過后才會繼續(xù)執(zhí)行其他線程。






猜你喜歡:

什么是線程讓步?

什么是線程安全?如何理解線程安全?

怎樣保障多線程同步數(shù)據(jù)的安全?

Java線程優(yōu)先級:Thread類的優(yōu)先級常量

傳智教育Java高級軟件工程師培訓(xùn)

0 分享到:
和我們在線交談!