在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("");
}
}
}
例外是什么意思?
答案 0 :(得分: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("");
}
}
答案 1 :(得分:1)
你不能多次启动一个线程。如果您多次启动一个帖子,您将获得IllegalThreadStateException
。
尝试,
new Thread(prova).start();
new Thread(prova).start();
如果你需要启动同一个线程。
答案 2 :(得分:0)
您不得多次启动线程。它只能启动一次。请参阅Thread.start()的JavaDoc:
多次启动线程永远不合法。
[..]
如果线程已经启动,则抛出IllegalThreadStateException。
答案 3 :(得分: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。请阅读线程文档
答案 4 :(得分:0)
您不能多次启动Thread
,您应该创建该Thread
的新实例,以便再次执行此任务。
所以你应该这样做:
if(!prova.isAlive()) {
Worker p = new Worker();
p.start();
contatore++;
}
Java doc:
不止一次启动线程永远不合法。特别是,一旦完成执行,线程可能无法重新启动。
阅读有关Java Threads
的更多信息