2013-02-15 95 views
3

在Java中,我得到这个异常:Java异常java.lang.IllegalThreadStateException

Exception in thread "main" java.lang.IllegalThreadStateException 
    at java.lang.Thread.start(Unknown Source) 
    at Threads4.go(Threads4.java:14) 
    at Threads4.main(Threads4.java:4) 

下面是代码:

public class Threads4 { 
    public static void main(String[] args){ 
     new Threads4().go(); 
    } 
    void go(){ 
     Runnable r = new Runnable(){ 
      public void run(){ 
       System.out.println("foo"); 
      } 
     }; 
     Thread t = new Thread(r); 
     t.start(); 
     t.start(); 

    } 
} 

什么是例外呢?

回答

5

您试图启动线程两次。

+0

谢谢.. @jeff Storey – Abhijeet 2013-02-15 18:49:35

+1

看同一分钟的其他答案,我们这里有比赛条件:)? – 2013-02-15 21:20:22

1

你不能两次启动你的线程。

+1

@code_burgar这确实回答了这个问题。 – 2013-02-15 18:56:53

+1

@ Eng.Fouad我的坏,它确实.. – 2013-02-15 18:58:02

0

您无法启动线程两次,

t.start(); 
t.start(); 

您尝试启动它已经启动的东西,所以你得到IllegalThreadStateException

+1

这与以前的两个答案有何不同? – 2013-02-15 18:35:31

+0

以及原因应该是不同的理由 – exexzian 2013-02-15 18:36:46

+0

右@sansix ...不会是一个不同的解决方案.. – Abhijeet 2013-02-15 18:50:59

0

无法启动相同的线程的两倍。

创建另一个线程,例如

Thread thread2 = new Thread(r); 
thread2.start(); 
0

您应该只启动一次该线程。只有线程完成运行,才可以再次启动线程。

下面的代码不会抛出任何异常:

t.start(); 
if(!t.isAlive()){ 
    t.start(); 
} 
+0

非常感谢你们所有的人...... – Abhijeet 2013-02-15 18:43:59

+1

你不能在一个线程上调用两次启动,甚至如果它已经完成 – 2013-02-15 19:00:03

0

一旦我们开始,我们不允许重新启动相同的线程,否则,我们将得到IllegalThreadStateException
在你的代码只是删除线螺纹

Thread t = new Thread(r); 
     t.start(); 
     t.start(); // Remove this line 
+0

这与exexzian的[answer](http://stackoverflow.com/a/14901166/369450)有什么不同? – cpburnz 2017-03-10 22:52:11