1. 程式人生 > >【java基礎】多執行緒匿名內部類和lambda建立方式,及多執行緒中的兩個面試題

【java基礎】多執行緒匿名內部類和lambda建立方式,及多執行緒中的兩個面試題

一、可以用匿名類和lambda兩個種方式建立多執行緒。

1.利用匿名內部類建立多執行緒並開啟。

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


2.利用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()方法。