【发布时间】:2016-02-08 21:11:49
【问题描述】:
Java 的一个教程给出了这个关于线程的例子。下面的代码 sn-p 来自https://docs.oracle.com/javase/tutorial/essential/concurrency/simple.html。这是我要询问的部分(有一些小的修改):
Thread t = new Thread(new MessageLoop());
t.start();
while (t.isAlive()) {
t.join();
}
主要问题是:当 t.isAlive() 在线程实际启动之前返回 false 时会发生什么?从我运行的一些测试中:
Thread t = new Thread(new Whatever());
t.start();
System.out.println(t.isAlive()+" "+t.getState());
t.getState() 可能是 NEW 而 t.isAlive() 是假的。上面的 while 循环永远不会加入我的工作线程,因为 isAlive 会返回 false(即使工作线程甚至没有启动)。除了第一个代码块中显示的方法之外,还有更好的方法来加入工作线程吗?我应该检查状态以及它是否还活着吗?可能是这样的:
while(t.isAlive() || t.getState()==Thread.State.NEW){ ... }
【问题讨论】:
标签: java multithreading