Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Can';t启动线程(实现Runnable)_Java_Multithreading - Fatal编程技术网

Java Can';t启动线程(实现Runnable)

Java Can';t启动线程(实现Runnable),java,multithreading,Java,Multithreading,你能帮我理解为什么我的免费线程不启动线程吗。 嗯,我可以看到对应于热线程的线程出现在debagger中。 但是当我添加一个自由线程时,没有线程出现。如果我尝试一步一步地跟踪它,光标不会转到超类重写的run(),而是转到Thread类的start()方法 无论如何,任何关于如何启动FreeThreads的帮助都将不胜感激 public class HotThread implements Runnable{ @Override public void run() {} } pub

你能帮我理解为什么我的免费线程不启动线程吗。 嗯,我可以看到对应于热线程的线程出现在debagger中。 但是当我添加一个自由线程时,没有线程出现。如果我尝试一步一步地跟踪它,光标不会转到超类重写的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();
    }
} 
公共类热线程实现可运行{
@凌驾
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() {}