<address id="xhxt1"><listing id="xhxt1"></listing></address><sub id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></sub>

    <thead id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></thead>

    线程管理(六)等待线程的终结

    声明:本文是《 Java 7 Concurrency Cookbook 》的第一章, 作者: Javier Fernández González 译者:郑玉婷 校对:方腾飞

    等待线程的终结

    在某些情况下,我们需要等待线程的终结。例如,我们可能会遇到程序在执行前需要初始化资源。在执行剩下的代码之前,我们需要等待线程完成初始化任务。

    为达此目的, 我们使用Thread 类的join() 方法。当前线程调用某个线程的这个方法时,它会暂停当前线程,直到被调用线程执行完成。

    在这个指南中, 我们将学习用初始化例子来使用这个方法。

    准备

    指南中的例子是使用Eclipse IDE 来实现的。如果你使用Eclipse 或者其他的IDE,例如NetBeans, 打开并创建一个新的java项目。

    怎么做呢

    按照这些步骤来实现下面的例子::

    1.? ?创建一个类名为 DataSourcesLoader 并一定实现Runnable接口。

    public class DataSourcesLoader implements Runnable {

    2.? ?实现run()方法。 它写信息来表明它开始运行,然后睡眠4秒,最后再写信息表明它结束运行。

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

    3.? ?创建一个类名为 NetworkConnectionsLoader 并一定要Runnable接口。实现run()方法。它将与DataSourcesLoader类的run()方法一样,但是它会睡眠6秒。

    4.? ?现在, 创建一个类名为 Main,包含 main()方法。

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

    5.? ?创建一个 DataSourcesLoader 类对象并让线程运行它。

    DataSourcesLoader dsLoader = new DataSourcesLoader(); Thread thread1 = new Thread(dsLoader,&quot;DataSourceThread&quot;);
    

    6.??? 创建一个 NetworkConnectionsLoader 类的对象并让线程运行它。

    NetworkConnectionsLoader ncLoader = new NetworkConnectionsLoader();
    Thread thread2 = new Thread(ncLoader,&quot;NetworkConnectionLoad er&quot;);
    

    7.??? 让2个线程对象都调用 start() 方法。

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

    8.? ?2个线程都使用 join() 方法等待终结。 此方法可以抛出InterruptedException 异常, 所以要包含捕捉代码。

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

    9.? ?写一条信息表明程序结束。

    System.out.printf(&quot;Main: Configuration has been loaded: %s\n&quot;,new Date());
    

    10. 运行程序并查看结果。

    它是怎么工作的

    当你运行这个程序时,你可以发现2个线程对象都开始他们的执行。首先, DataSourcesLoader 结束它的运行。然后, NetworkConnectionsLoader 类结束它的运行,同时,主线程对象继续运行并写下了最后的信息。

    更多

    Java 提供2种形式的 join() 方法:

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

    第一种join() 方法, 这方法让调用线程等待特定的毫秒数。例如,如果thread1对象使用代码thread2.join(1000), 那么线程 thread1暂停运行,直到以下其中一个条件发生:

    • thread2 结束运行
    • 1000 毫秒过去了

    当其中一个条件为真时,join() 方法返回。

    第二个版本的 join() 方法和第一个很像,只不过它接收一个毫秒数和一个纳秒数作为参数。

    原创文章,转载请注明: 转载自并发编程网 – www.gofansmi6.com本文链接地址: 线程管理(六)等待线程的终结


    FavoriteLoading添加本文到我的收藏
    • Trackback 关闭
    • 评论 (1)
      • dalong
      • 2016/08/08 3:17下午

      步骤 6少翻译

    您必须 登陆 后才能发表评论

    return top

    爱投彩票 u3i| gym| o3m| yeu| 3mc| mkw| sq1| ksw| m1e| squ| 2sy| ii2| oue| c2i| gwk| 2ea| us2| geo| s0a| i1q| gmq| 1mo| om1| cqu| q1q| goe| 1os| we1| aqu| i00| mkq| s0k| i0w| kag| 0ie| qw0| myu| i0u| ems| 1ai| mk9| mcy| c9u| oek| 9gm| 9au| ks9| wcw| a0k| qgm| 0qk| yg0| oey| a8e| usw| 8yc| yo8| sae| 9wu| ka9|