无法启动线程(实现Runnable)

时间:2014-03-23 21:42:19

标签: java multithreading

你能帮我理解为什么我的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();
    }
} 

1 个答案:

答案 0 :(得分:0)

public void run() {}

因此,如果你的run()方法确实为空,那么线程正在启​​动但是立即完成,你从未在调试器中看到它们,因为它们已经完成了。尝试放一个Thread.sleep(10000000);,这样你就可以看到线程正在运行。或者正如@Radiodef所评论的那样,你可以在调试器中放置一个断点,它应该停在那里。

  

不,不是空的。有Thread.currentThread()。start();那里。

这是错误的。如果输入run()方法,则线程已经开始。通过再次尝试start(),您将导致IllegalThreadStateException被抛出,因为线程状态不正确会立即终止正在运行的线程。根据定义,您可以start()当前(正在运行)的线程是一个无效的概念。