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异常Java.lang.IllegalThreadStateException_Java_Multithreading - Fatal编程技术网

错误Java异常Java.lang.IllegalThreadStateException

错误Java异常Java.lang.IllegalThreadStateException,java,multithreading,Java,Multithreading,在Java中,我遇到了以下异常: 线程“main”java.lang.IllegalThreadStateException中的异常 代码如下: class Worker extends Thread { public void run() { System.out.println("#"); } } class Seconda extends Thread { public void run() { System.out.println("*"); }

在Java中,我遇到了以下异常:

线程“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(""); 
          }

   }
 }

异常意味着什么?

不能多次启动线程。只能启动一次。请参阅以下文件的JavaDoc:

多次启动线程是不合法的

[……]

如果线程已启动,则引发IllegalThreadStateException


您应该了解线程的生命周期。如果您尝试启动一个已经启动的线程(它可能是活动的或其他),您将得到一个非法的ThreadStateException。请阅读线程文档

您不能多次启动
线程
,您应该为该
线程创建一个新实例
,以便再次执行该任务

所以你应该这样做:

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

多次启动线程是不合法的。特别是,线程一旦完成执行,就不能重新启动


阅读有关Java的更多信息

您正在尝试启动一个已经启动的线程

您需要做的是在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(""); 
     }
}

一个线程不能启动多次。如果启动一个线程不止一次,您将得到一个
IllegalThreadStateException

试试看

如果您需要启动相同的线程


对于

,一旦线程终止,就无法重新启动它!您必须创建一个新的
线程
对象
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(""); 
     }
}
new Thread(prova).start();
new Thread(prova).start();