亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java并發編程示例(六):等待線程執行終止

2019-11-26 15:20:33
字體:
來源:轉載
供稿:網友

在某些場景下,我們必須等待線程執行完成才能進行下一步工作。例如,某些程序在開始執行之前,需要先初始化一些資源。這時,我們可以啟動一個線程專門來做初始化任務,等到線程任務完成后,再去執行其他部分。

為此,Thread類為我們提供了join()方法。當我們使用線程對象調用此方法時,正在掉調用的線程對象將被推遲到被調用對象執行完成后再開始執行。

在本節,示例程序演示等待初始化方法完成后,再去執行其他任務。

知其然

按照下面所示步驟,完成示例程序。

1.創建一個名為DataSourcesLoader的類,并且實現Runnable接口。代碼如下:

復制代碼 代碼如下:

public class DataSourcesLoader implements Runnable {

2.實現run()方法,向控制臺打印出一條信息以說明開始執行,然后睡眠4秒鐘,再向控制臺打印一條信息來說明線程執行結束。代碼如下:

復制代碼 代碼如下:

@Override
public void run() {
    System.out.printf("Beginning data sources loading: %s/n",
            new Date());
    try {
        TimeUnit.SECONDS.sleep(4);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    System.out.printf("Data sources loading has finished: %s/n",
            new Date());
}


3.創建一個名為NetworkConnectionsLoader的類,并且實現Runnable接口。 實現run()方法,該方法代碼與DataSourcesLoader類的run()方法一樣,只是這個睡眠6秒鐘。

4.實現示例的主類,并且實現main()方法。代碼如下:

復制代碼 代碼如下:

public class Main {
    public static void main(String[] args) {

5.創建一個DataSourcesLoader對象,以及一個啟動它執行的Thread對象。代碼如下:
復制代碼 代碼如下:

DataSourcesLoader dsLoader = new DataSourcesLoader();
Thread thread1 = new Thread(dsLoader, "DataSourcesLoader");

6.創建一個NetworkConnectionsLoader對象,以及一個啟動它執行的Thread對象。代碼如下:
復制代碼 代碼如下:

NetworkConnectionsLoader ncLoader = new NetworkConnectionsLoader();
Thread thread2 = new Thread(ncLoader, "NetworkConnectionsLoader");

7.調用兩個Thread對象的start()方法。代碼如下:
復制代碼 代碼如下:

thread1.start();
thread2.start();

8.調用join()方法,來等待兩個線程完成其任務。這個方法會拋出InterruptedException異常,所以要捕獲該異常。代碼如下:
復制代碼 代碼如下:

try {
    thread1.join();
    thread2.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}

9.向控制臺打印一句話,表明程序執行結束。代碼如下:
復制代碼 代碼如下:

System.out.printf("Main: Configuration has been loaded: %s/n",
        new Date());

10.運行程序,查看執行效果。

知其所以然

當運行這個示例程序時,我們可以看到兩個線程啟動了它們的執行。首先,是DataSourcesLoader完成了它的執行;然后,是NetworkConnectionsLoader完成了它的執行。這時,主線程繼續它的執行,然后向控制臺打印出終止信息。

永無止境

Java提供了另外兩種重載的join()方法:

復制代碼 代碼如下:

join(long milliseconds)
join(long milliseconds, long nanos)

第一種方式,不會直到被調用完成任務,而是等待參數指定的時間后就開始執行;例如,如果thread1調用該方法,thread1.join(1000),當thread1線程滿足如下其中之一的條件就會繼續執行:

1.thread2完成它的執行;
2.1000毫秒過后;

當這兩個條件中的其中之一為真時,join()方法就會返回,開始繼續執行原來的任務。

第二種方式的方法和第一種很類似,只是多了一個納秒級的時間參數。

拿來主義

本文是從 《Java 7 Concurrency Cookbook》 (D瓜哥竊譯為 《Java7并發示例集》 )翻譯而來,僅作為學習資料使用。沒有授權,不得用于任何商業行為。

小有所成

本節所用示例代碼的完整版。

DataSourcesLoader類的完整代碼

復制代碼 代碼如下:

package com.diguage.books.concurrencycookbook.chapter1.recipe6;

import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * Date: 2013-09-19
 * Time: 09:15
 */
public class DataSourcesLoader implements Runnable {
    @Override
    public void run() {
        System.out.printf("Beginning data sources loading: %s/n",
                new Date());
        try {
            TimeUnit.SECONDS.sleep(4);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.printf("Data sources loading has finished: %s/n",
                new Date());
    }
}

NetworkConnectionsLoader類的完整代碼

復制代碼 代碼如下:

package com.diguage.books.concurrencycookbook.chapter1.recipe6;

import java.util.Date;
import java.util.concurrent.TimeUnit;

/**
 * Date: 2013-09-19
 * Time: 09:21
 */
public class NetworkConnectionsLoader implements Runnable {
    @Override
    public void run() {
        System.out.printf("Beginning data sources loading: %s/n",
                new Date());
        try {
            TimeUnit.SECONDS.sleep(6);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.printf("Data sources loading has finished: %s/n",
                new Date());
    }
}

Main類的完整代碼

復制代碼 代碼如下:

package com.diguage.books.concurrencycookbook.chapter1.recipe6;

import java.util.Date;

/**
 * Date: 2013-09-19
 * Time: 09:25
 */
public class Main {
    public static void main(String[] args) {
        DataSourcesLoader dsLoader = new DataSourcesLoader();
        Thread thread1 = new Thread(dsLoader, "DataSourcesLoader");

        NetworkConnectionsLoader ncLoader = new NetworkConnectionsLoader();
        Thread thread2 = new Thread(ncLoader, "NetworkConnectionsLoader");

        thread1.start();
        thread2.start();

        try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.printf("Main: Configuration has been loaded: %s/n",
                new Date());
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合精品伊人久久| 国产极品jizzhd欧美| 深夜福利亚洲导航| 在线视频欧美性高潮| 欧美性色xo影院| 中文字幕日本欧美| 国产精品美乳一区二区免费| 亚洲视频日韩精品| 欧美成人激情视频| xvideos成人免费中文版| 欧美日韩国产色视频| 国产精品久久久久久久久久| 视频在线观看一区二区| 国产精品v片在线观看不卡| 亚洲aa中文字幕| 国产一区玩具在线观看| 亚洲国产欧美自拍| 欧美在线视频在线播放完整版免费观看| 成人免费视频网址| www.亚洲人.com| 国产精品久久久久久久久久久不卡| 91黑丝高跟在线| 久久人人看视频| 亚洲免费电影在线观看| 中文字幕国产亚洲| 亚洲福利影片在线| 91在线高清免费观看| 激情久久av一区av二区av三区| 97超级碰碰人国产在线观看| 亚洲成人免费在线视频| 日韩一区二区av| 成人av番号网| 久久精品国产电影| 亚洲人免费视频| 国产成人高清激情视频在线观看| 欧美日韩国产色| 欧美小视频在线| 欧美成人免费大片| 成人在线观看视频网站| 成人妇女淫片aaaa视频| 欧美裸体视频网站| 亚洲自拍偷拍福利| 亚洲国产精品99| 久久五月情影视| 亚洲精品国产精品乱码不99按摩| 午夜精品久久久99热福利| 国产经典一区二区| 97精品国产97久久久久久免费| 欧美激情亚洲视频| 国产日本欧美视频| www.欧美精品| www.欧美三级电影.com| 日韩久久午夜影院| 国产成人精品av| 精品国产一区二区三区在线观看| 永久免费精品影视网站| 国产精品草莓在线免费观看| 日韩精品视频在线观看网址| 亚洲午夜av久久乱码| 亚洲欧美精品中文字幕在线| 久久成人18免费网站| 亚洲欧美日韩天堂| 最近2019年日本中文免费字幕| 亚洲人成在线观| 国产a级全部精品| 欧美性猛交xxxx| 亚洲人精品午夜在线观看| 日韩欧美中文字幕在线观看| 欧美肥臀大乳一区二区免费视频| 高清日韩电视剧大全免费播放在线观看| 热久久这里只有| 日韩av不卡在线| 亚洲精品乱码久久久久久按摩观| 亚洲欧美在线x视频| 欧美专区在线视频| 欧美性20hd另类| 69影院欧美专区视频| 欧美成人免费小视频| 欧美日韩国产限制| 97超级碰碰人国产在线观看| 国内偷自视频区视频综合| 欧美大胆a视频| 2019亚洲日韩新视频| 精品视频偷偷看在线观看| 91精品国产综合久久久久久久久| 日韩精品久久久久| 亚洲一区二区日本| 亚洲成人精品久久久| 亚洲精品影视在线观看| 一区二区三区视频免费| 欧美黄色免费网站| 欧美综合国产精品久久丁香| 亚洲最大在线视频| 亚洲精选在线观看| 亚洲一区av在线播放| 欧美视频裸体精品| 91久久久久久久久久| 久久中文字幕视频| 亚洲第一av网站| 午夜精品一区二区三区在线| 久久免费视频这里只有精品| 欧美国产亚洲视频| 777午夜精品福利在线观看| 国产精品稀缺呦系列在线| 日韩精品在线免费观看| 久久免费视频在线观看| 久久成人精品一区二区三区| 日韩免费在线看| 2018中文字幕一区二区三区| 在线视频欧美日韩| 欧美一级视频免费在线观看| 欧美自拍视频在线| 97久久久免费福利网址| 成人精品视频在线| 亚洲aⅴ日韩av电影在线观看| 久久伊人精品一区二区三区| 中文综合在线观看| 青青草原一区二区| 亚洲一区二区三区sesese| 国产精品免费电影| 国产成人精品免费视频| 国产狼人综合免费视频| 国产精品久久久久高潮| 黑人与娇小精品av专区| 一区二区三区精品99久久| 欧美日韩国产综合新一区| 97视频在线观看免费高清完整版在线观看| 欧美成人中文字幕| 国产一区二区在线免费视频| 欧美日韩亚洲一区二区三区| 国产日本欧美在线观看| 亚洲欧美日韩爽爽影院| 精品国产一区二区三区久久久狼| 亚洲色图25p| 精品国产乱码久久久久久虫虫漫画| 精品国产一区久久久| 亚洲精品福利在线观看| 欧美资源在线观看| 欧美激情一级精品国产| 免费不卡欧美自拍视频| 亚洲第一中文字幕在线观看| 日韩美女毛茸茸| 91av视频导航| 久久久国产精彩视频美女艺术照福利| 国产精品主播视频| 国产做受69高潮| 亚洲国产精品va在线观看黑人| 色噜噜狠狠色综合网图区| 蜜臀久久99精品久久久无需会员| 欧美猛少妇色xxxxx| 国产成人97精品免费看片| 中文字幕v亚洲ⅴv天堂| 国内精品久久久久影院优| 欧美做爰性生交视频| 国产亚洲一区二区在线| 亚洲国产欧美在线成人app| 亚洲免费av电影| 懂色av中文一区二区三区天美| 久久久影视精品| 国产国产精品人在线视| 国产精品极品美女粉嫩高清在线| 国内精品久久久久久中文字幕| 亚洲激情视频在线观看| 欧美黑人一级爽快片淫片高清|