多线程,启动,加入-java

时间:2014-12-02 21:48:41

标签: java multithreading

这样做有什么问题?我目前正在学习线程

thread1.start();
thread1.join();
thread2.start();
thread2.join();
编辑:我知道这是一个错误,因为它是我学习的源头。但是,消息来源没有提供关于它为什么错误的答案

在线程上使用和不使用.join有什么区别?

3 个答案:

答案 0 :(得分:1)

没有理由启动新线程然后立即加入。 join()将暂停当前线程,直到另一个完成。这与写作具有相同的效果:

thread1.run();
thread2.run();

作者可能意味着:

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

这种方式thread1thread2可以同时执行。

答案 1 :(得分:0)

如果你把它放在try / catch中它不是一个错误,但是会有一个问题,为什么你想这样做并使用线程?这将等到thread1死亡,然后开始使用thread2。来自here的这个示例将有助于您理解join()的概念(阅读他们非常好解释的评论):

    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();
    }

答案 2 :(得分:0)

很难判断是不是错误。这取决于你在线程thread1和thread2中做了什么以及你想要实现什么。

来自Java文档:

thread1.join();

导致当前线程暂停执行,直到thread1的线程终止。

如果您尝试同时启动两个线程,那么这是一个问题,因为线程将连续启动。