好吧,任何人请,我问
this
但我意识到我能够在纯Java应用程序上重新创建类似的场景。
我创建了一个线程类作为内部类并重写它的
运行()
Thread aaa = new Thread(){
public void run() {
for(int i=0;i<5;i++){
System.out.println(getId()+"
try {
Thread.sleep(1000 * 1);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
};
在我的Main方法中,我启动了那个线程,然后睡了6秒钟(我的想法是线程应该在时间之前完成它的run方法)
然后我再次尝试启动同一个线程
public static void main(String[] args) {
Test test = new Test();
//Start the thread
test.aaa.start();
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//Start same dead thread again
test.aaa.start();
}
在我的Ubuntu机器上,在最后一行再次启动线程
非法ThreadStateException
这就是我认为的准则。输出如下所示:
9
9
9
9
9
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:708)
at Test.main(Test.java:15)
但在我的Android设备上,它反复运行同一个线程,输出结果如下:
50023
50023
50023
50023
50023
50023
50023
50023
50023
50023
我不明白同一个线程是如何再次启动的,至少Id证明了这一点。