Java 多線程實現的兩種方式

如何寫一個 線程程序:

方式一:

1)寫一個類繼承Thread類,重寫run()方法

2)創建這個類的對象,調用start()

代碼:

MyThread--->提供一個構造方法調用父類的構造方法 爲了是給線程提供一個名字!

package cn.itcast.thread;

public class MyThread extends Thread{
	private String name;
	 public MyThread(String name){//通過構造方法的方式來爲線程傳遞名臣
		 super(name);
	 }
	@Override
	public void run() {
		for(int i=0;i<100;i++){
			System.out.println(getName()+":"+i);
		}
	}
}
測試類:

package cn.itcast.thread;

public class MyThreadTest {
	public static void main(String[] args) {
		MyThread my1=new MyThread("李衛康");
		MyThread my2=new MyThread("韓瑋");
		my1.start();
		my1.setName("王超");///設置線程的名字
		my2.start();
		System.out.println(Thread.currentThread().getName());
	}
}
方式二:

1)寫一個類實現runable接口

2)創建一個Thread對象傳入剛纔寫好的類

3)調用start方法

代碼:

MyRunable

package cn.itcast.runable;

public class MyRunable implements Runnable{

	@Override
	public void run() {
		for(int i=0;i<10;i++){
			System.out.println(Thread.currentThread().getName()+":"+i);
		}
	}
	
}
MyRunableTest

package cn.itcast.runable;

public class MyRunableTest {
	public static void main(String[] args) {
		MyRunable my=new MyRunable();
		Thread t1=new Thread(my);
		t1.start();
	}
}
解釋:線程的執行流程是怎麼樣的?






面試題:

調用線程類的run方法和執行start方法有什麼區別?

Start:
用start方法來啓動線程,真正實現了多線程運行,這時無需等待run方法體代碼執行完畢而直接繼續執行下面的代碼。通過調用Thread類的start()方法來啓動一個線程,這時此線程處於就緒(可運行)狀態,並沒有運行,一旦得到spu時間片,就開始執行run()方法,這裏方法run()稱爲線程體,它包含了要執行的這個線程的內容,Run方法運行結束,此線程隨即終止。
Run:
run()方法只是類的一個普通方法而已,如果直接調用Run方法,程序中依然只有主線程這一個線程,其程序執行路徑還是隻有一條,還是要順序執行,還是要等待run方法體執行完畢後纔可繼續執行下面的代碼,這樣就沒有達到寫線程的目的。
總結:調用start方法方可啓動線程,而run方法只是thread的一個普通方法調用,還是在主線程裏執行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章