執行緒的隨機性之實現Thread類
阿新 • • 發佈:2019-01-13
1、我們先來看下面程式的執行結果
public class Thread2 {
public static void main(String[] args) {
myThread m=new myThread();
m.start();
System.out.println("執行結束");
}
}
class myThread extends Thread {
@Override
public void run() {
// 重新Thread的run方法
super.run();
System.out.println("MyThread");
}
}
根據執行的次數不同得出的結果不同:
MyThread
執行結束
執行結束
MyThread
從執行的結果我們就可以得出 在使用多執行緒時,程式碼的執行結果與程式碼的執行順序是無關的。執行緒是一個子任務,CPU以不確定的方式呼叫執行緒的run方法。 如果我們對上面的程式多次執行會發現什麼問題?我們將程式碼改成如下內容:
執行結果:public class Thread2 { public static void main(String[] args) { myThread m=new myThread(); while(true){ m.start(); System.out.println("執行結束"); } } } class myThread extends Thread { @Override public void run() { // 重新Thread的run方法 super.run(); System.out.println("MyThread"); } }
執行結束
MyThread
Exception in thread "main" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:705)
at com.demo1.vector.Thread2.main(Thread2.java:7)
為什麼會出現這樣的問題呢?
原因是我們的自定義執行緒繼承了Thread類,同一個Thread類不能呼叫start()方法,因為執行緒的生命週期是一個不可迴圈的過程,當前myThread執行緒結束了,不能再次start().