0.5、多線程學習——啓動線程時 thread.run() 和thread.start()的區別

前言

體能狀態先於精神狀態,習慣先於決心,聚焦先於喜好。

聲明線程對象 必須 覆蓋重寫 run() 方法

聲明線程對象 必須 覆蓋重寫 run() 方法

Thread t2=new Thread() {
	@Override
	public void run() {
		super.run();
		System.out.println("輸出了內容:2-1");
	}
};

啓動線程時 thread.run() 和thread.start()的區別

start()會啓動一個新線程,並在新線程中運行run()方法-這樣就是異步執行了
run() 會在當前線程中執行run(),而並不會啓動新線程,也就說,多線程變成了單線程,run()會當作普通函數

代碼舉例

聲明兩個線程,分別使用 run() 和 start() 查看區別

  • 代碼
public class RunTest {
	public static void main(String[] args) {
		//第一個線程
		Thread t=new Thread() {
			@Override
			public void run() {
				super.run();
				System.out.println("輸出了內容:1-1");
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("輸出了內容:1-2");
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		};
		//第二個線程
		Thread t2=new Thread() {
			@Override
			public void run() {
				super.run();
				System.out.println("輸出了內容:2-1");
			}
		};
		//run() 會在當前線程中執行run(),而並不會啓動新線程,也就說,多線程變成了單線程
		t.run();
		t2.run();
		System.out.println("分割線");
		//start()會啓動一個新線程,並在新線程中運行run()方法-這樣就是異步執行了
		t.start();
		t2.start();
	}
}
  • 結果
輸出了內容:1-1
輸出了內容:1-2
輸出了內容:2-1
分割線
輸出了內容:1-1
輸出了內容:2-1
輸出了內容:1-2

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