2014-03-31 63 views
0

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

异常线程 “main” java.lang.IllegalThreadStateException

这里是代码:

class Worker extends Thread 
{ 
    public void run() { 
    System.out.println("#"); 
} 
} 

class Seconda extends Thread 
{ 
    public void run() { 
     System.out.println("*"); 
    } 
} 


public class First 
{ 
    public static void main(String args[]) { 
     int contatore=0; 
     Worker prova = new Worker(); 
     Seconda prova2 = new Seconda(); 
     prova.start(); 
     prova2.start(); 
     for(;;) { 
       if(!prova.isAlive()) { prova.start(); 
             contatore++; 
            } 
      if(!prova2.isAlive()) { prova2.start(); 
            contatore++; 
           } 
      if(contatore==50) System.out.println(""); 
      } 

    } 
} 

这个例外是什么意思?

+2

线程终止后,您无法重新启动它!你必须创建一个新的'Thread'对象 – fge

回答

1

您试图启动已经被启动的线程。

你需要做的是在for循环中创建prova和prova2?

public static void main(String args[]) { 
    int contatore=0; 
    //Worker prova = new Worker(); 
    //Seconda prova2 = new Seconda(); 
    //prova.start(); 
    //prova2.start(); 
    for(;;) { 
    Worker prova = new Worker(); 
    Seconda prova2 = new Seconda(); 
    if(!prova.isAlive()) { 
     prova.start(); 
     contatore++; 
    } 
    if(!prova2.isAlive()) { 
     prova2.start(); 
     contatore++; 
    } 
    if(contatore==50) System.out.println(""); 
    } 
} 
0

您不能多次启动线程。它只能启动一次。请参阅JavaDoc Thread.start()

多次启动线程永远不合法。

[..]

抛出IllegalThreadStateException如果线程已经启动。

0
for(;;) { 
       if(!prova.isAlive()) { prova.start(); // trying to start a started thread again 
             contatore++; 
            } 
      if(!prova2.isAlive()) { prova2.start();// trying to start a started thread 
            contatore++; 
           } 
      if(contatore==50) System.out.println(""); 
      } 

    } 

你应该阅读有关线程的生命周期。如果你尝试启动一个已经启动的线程(它可以是活着的或其他的),你将会得到一个IllegalThreadStateException。请阅读线程文档

0

您不能只是多次启动Thread,您应该创建该Thread的新实例以便再次执行任务。

所以,你应该做这样的事情:

if(!prova.isAlive()) { 
    Worker p = new Worker(); 
    p.start(); 
    contatore++; 
} 

Java文档:

这是从来没有的法律,以启动一个线程不止一次。特别是,线程一旦完成执行就不会重新启动。

了解更多关于Java Threads

1

您不能启动一个线程多于一次。如果你多次启动一个线程,你会得到一个IllegalThreadStateException

尝试,

new Thread(prova).start(); 
new Thread(prova).start(); 

,如果你需要启动相同的线程。

对于More