你如何在一行中挂起Java中的一个线程?

rui*_*rui 6 java multithreading

一行我的意思是每行最多100个字符.

(我基本上需要这个来保持程序活着.主线程注册在不同线程中运行的回调监听器.我只需要主要的一个永久挂起并让其他线程完成它们的工作)

Boz*_*zho 13

synchronized(this) {
    while (true) {
        this.wait();
    }
}
Run Code Online (Sandbox Code Playgroud)

(感谢Carlos Heuberger.上面代码中省略了异常处理)

这将使当前线程在当前类的监视器上等待,直到有人调用notify()或永远.


kro*_*ock 12

你可以做的一些事情比永久挂起初始线程更好:

  1. 使用otherThread.join().这将导致您正在运行的当前线程休眠,直到另一个线程执行完毕.
  2. 正如@nanda建议的那样,使用ExcecutorService.shutdown()等待线程池完成.
  3. 使用otherThread.setDaemon(false)并简单地让您的初始线程退出.这会将您的新线程设置为用户线程.在运行的唯一线程是守护程序线程之前,Java不会关闭.

  • 只需循环遍历您的线程并为每个线程调用join().一旦完成循环,将加入下一个循环.循环退出时,可以确定最后一个线程已退出. (3认同)

Tim*_*der 6

Thread.sleep(Long.MAX_VALUE);

好吧,所以它不是永远的,但谈论很长一段时间:)

  • 将它包装在一起虽然是多余的,但是所有实际目的都是因为线程会睡了292471208.7!实际上这是永远...... (2认同)

nan*_*nda 5

使用执行者.通过使用方法shutdown(),您将强制执行程序等待所有线程完成.


Red*_*lab 5

使用CountDownLatch,您可以等到倒数达到 0,如果您确保它永远不会倒数,也许只有在需要结束时才倒数。(这也会导致 0% cpu,与将永远运行的循环相反,并且使用 join(),当所有其他线程完成时,您的应用程序仍将完成,执行器的选项更好,但也会在所有执行的任务时结束完成了)