幾種簡潔建立執行緒的方式以及使用注意事項

FeelTouch發表於2018-12-11

匿名類

new Thread() {//建立方式1
	public void run() {
		for(int x=0; x<50; x++) {		
			System.out.println(Thread.currentThread().getName()+"....x="+x);
		}
	}
}.start();
 
Runnable r = new Runnable() {//建立方式2
	public void run() {	
		for(int x=0; x<50; x++) {		
			System.out.println(Thread.currentThread().getName()+"....z="+x);
		}
	}
};
new Thread(r).start();

Lambda

Runnable r = ()->{
	for(int x=0; x<50; x++){
		System.out.println(Thread.currentThread().getName()+"....z="+x);
	}
};
new Thread(r).start();

注意事項

事項1

class Test implements Runnable {
	public void run(Thread t){}
}
//如果錯誤 錯誤發生在哪一行?
//答案:錯誤在第一行,應該被abstract修飾,因為run()抽象方法沒有被重寫。

事項2

class ThreadTest {
	public static void main(String[] args) {
 
		new Thread(new Runnable() {
			public void run() {
				System.out.println("runnable run");
			}}) {
			public void run()
			{
				System.out.println("subThread run");
			}
		}.start();
	}
}

問題:在Thread方法中引入了一個多執行緒任務的引數,該引數重寫了run()方式,同時又用匿名內部類的方式重寫了run()方法。問,將會輸出哪個?

答案:將會輸出subThread run,必須以子類為主,若子類沒有,在輸出引數任務中的runnable run,若都沒有,則執行Thread類中預設的run()方法。

 

相關文章