编辑:我想让一个用户输入停止一个线程,然后另一个用户输入将启动该线程。
我有一个菜鸟Java问题,我是Threads的新手,我想知道是否在执行Thread.currentThread().join();
时再次运行同一线程,它将覆盖我刚刚加入的Thread还是将它覆盖?运行一个新线程?希望我的问题清楚。
答案 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 。