是否认为Thread.join()杀死线程?在thread.join()之后再运行另一个thread.start()是否可以?

时间:2018-10-23 08:49:44

标签: java multithreading

编辑:我想让一个用户输入停止一个线程,然后另一个用户输入将启动该线程。

我有一个菜鸟Java问题,我是Threads的新手,我想知道是否在执行Thread.currentThread().join();时再次运行同一线程,它将覆盖我刚刚加入的Thread还是将它覆盖?运行一个新线程?希望我的问题清楚。

2 个答案:

答案 0 :(得分:0)

来自JavDoc

等待该线程死亡。此实现使用以this.isAlive为条件的this.wait调用循环。当线程终止时,将调用this.notifyAll方法。建议应用程序不要在线程实例上使用wait,notify或notifyAll。

Thread t1 = new Thread(new MyRunnable(), "t1");
t1.start();
// wait here for t1 to terminate.
t1.join();
// alternatively, you can provide a timeout in ms.
t1.join(1000);

调用线程(假设它是主线程)将等待另一个线程t1终止。

术语 joining 可能会引起误解,在两个线程的意义上没有联接,也没有 overrideing

如果您要终止线程,请查看here(简而言之,不要试图杀死线程,而要使其完成工作,它将在此之后自然终止)

答案 1 :(得分:0)

请非常清楚:t.join()并没有对线程t进行任何操作。

它唯一要做的就是 wait 等待线程t终止。


  

当我执行Thread.currentThread()。join();并再次重新运行同一线程时,它会覆盖我刚刚加入的线程还是会运行新线程?

Thread实例只能被start()一次。每次要启动新线程时,都必须创建一个新的Thread 实例


...但是,如果您认为希望程序不断创建新线程,则可能应该阅读 thread pools