Java Can';t启动线程(实现Runnable)
你能帮我理解为什么我的免费线程不启动线程吗。 嗯,我可以看到对应于热线程的线程出现在debagger中。 但是当我添加一个自由线程时,没有线程出现。如果我尝试一步一步地跟踪它,光标不会转到超类重写的run(),而是转到Thread类的start()方法 无论如何,任何关于如何启动FreeThreads的帮助都将不胜感激Java Can';t启动线程(实现Runnable),java,multithreading,Java,Multithreading,你能帮我理解为什么我的免费线程不启动线程吗。 嗯,我可以看到对应于热线程的线程出现在debagger中。 但是当我添加一个自由线程时,没有线程出现。如果我尝试一步一步地跟踪它,光标不会转到超类重写的run(),而是转到Thread类的start()方法 无论如何,任何关于如何启动FreeThreads的帮助都将不胜感激 public class HotThread implements Runnable{ @Override public void run() {} } pub
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();
}
}
公共类热线程实现可运行{
@凌驾
public void run(){}
}
公共类FreeThread扩展了热线程{
公共自由线程(int超时){
超级();
...
}
}
公共类线程池{
公共线程池(int numberOfHotThreads){
对于(int i=0;i
因此,如果您的run()
方法真的为空,那么线程将启动,但会立即结束,并且您永远不会在调试器中看到它们,因为它们已经完成。尝试放置线程。睡眠(10000000)代码>以便您可以看到线程正在运行。或者正如@Radiodef所评论的,您可以在调试器中放置一个断点,它应该停止在那里
不,不是空的。有Thread.currentThread().start();在那里
这是错误的。如果输入run()
方法,则线程已经启动。通过再次尝试start()
它,您将导致抛出IllegalThreadStateException
,因为错误的线程状态将立即终止正在运行的线程。从定义上讲,您可以start()
当前(正在运行的)线程的想法是无效的。您的run()
方法真的是空的吗?如果是这样的话,那么线程很可能正在启动并立即完成,而您永远不会在调试器中看到它们,因为它们已经完成了。不,不是空的。有Thread.currentThread().start();在那里,您将看不到调试器一步一步地执行运行
,因为它在新线程上被调用。如果在run
中插入断点,您应该会看到它被调用。@Trts您认为一个已启动的线程如何再次启动自身?
public void run() {}