你能帮我理解为什么我的FreeThread没有启动一个帖子。 好吧,我可以看到对应于HotThreads的线程出现在debagger中。 但是当我添加FreeThread时,不会出现任何线程。如果我尝试逐步跟踪它,光标不会转到超类重写的run(),而是转到Thread类的start()方法。
无论如何,任何帮助如何启动FreeThreads都将受到高度赞赏。
public class HotThread implements Runnable{
@Override
public void run() {}
}
public class FreeThread extends HotThread {
public FreeThread(int timeout) {
super();
...
}
}
public class ThreadPool {
public ThreadPool(int numberOfHotThreads) {
for (int i = 0; i < numberOfHotThreads; i++) {
HotThread ht;
Thread t;
ht = new HotThread(); // Нагруженный поток (есть задача).
t = new Thread(ht);
t.start();
}
}
public void addFreeThread() {
FreeThread ft = new FreeThread();
Thread t = new Thread(ft);
t.start();
}
}
答案 0 :(得分:0)
public void run() {}
因此,如果你的run()
方法确实为空,那么线程正在启动但是立即完成,你从未在调试器中看到它们,因为它们已经完成了。尝试放一个Thread.sleep(10000000);
,这样你就可以看到线程正在运行。或者正如@Radiodef所评论的那样,你可以在调试器中放置一个断点,它应该停在那里。
不,不是空的。有Thread.currentThread()。start();那里。
这是错误的。如果输入run()
方法,则线程已经开始。通过再次尝试start()
,您将导致IllegalThreadStateException
被抛出,因为线程状态不正确会立即终止正在运行的线程。根据定义,您可以start()
当前(正在运行)的线程是一个无效的概念。