1. 程式人生 > >執行緒的隨機性之實現Thread類

執行緒的隨機性之實現Thread類

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().