错误Java异常Java.lang.IllegalThreadStateException
在Java中,我遇到了以下异常: 线程“main”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("*"); }
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();