- 創建線程的方式
- extends Thread,重現run方法,在run方法中定義需要執行的任務
public class CycleThread extends Thread { @Override public void run() { while (true) { System.out.println("sleepping"); System.out.println("studying"); System.out.println("eatting"); System.out.println("one day is over"); System.out.println(); } } }
創建和啓動線程
public class TestThread { public static void main(String[] args) { CycleThread thread=new CycleThread(); thread.start(); } }
- implements Runnable,實現run方法,在run方法中定義需要執行的任務
public class CycleRunnable implements Runnable { @Override public void run() { while (true) { System.out.println("sleepping"); System.out.println("studying"); System.out.println("eatting"); System.out.println("one day is over"); System.out.println(); } } }
創建和啓動線程
public class TestRunnable { public static void main(String[] args) { CycleRunnable circleRunnable=new CycleRunnable(); Thread thread=new Thread(circleRunnable); thread.start(); } }
- start()和run()方法的區別
利用線程ID區分執行run()和start()
public class RunStartThread extends Thread { private String name; public RunStartThread(String name) { this.name=name; } @Override public void run() { System.out.println(name +"線程ID: " + Thread.currentThread().getId()); } }
測試
public class TestRunStart { public static void main(String[] args) { System.out.println("主線程ID: "+Thread.currentThread().getId()); RunStartThread thread1=new RunStartThread("thread1"); thread1.start(); RunStartThread thread2=new RunStartThread("thread2"); thread2.run(); } }
執行結果
注意這裏的主線程是main方法執行後所產生的java.exe進程中的主線程。
- thread1和thread2的線程ID不同,thread2和主線程ID相同,說明通過run方法調用並不會創建新的線程,而是在主線程中直接運行run方法,跟普通的方法調用沒有任何區別
- 雖然thread1的start方法調用在thread2的run方法前面調用,但是先輸出的是thread2的run方法調用的相關信息,說明新線程創建的過程不會阻塞主線程的後續執行。
在Java中,這2種方式都可以用來創建線程去執行子任務,具體選擇哪一種方式要看自己的需求。直接繼承Thread類的話,可能比實現Runnable接口看起來更加簡潔,但是由於Java只允許單繼承,所以如果自定義類需要繼承其他類,則只能選擇實現Runnable接口。
Java線程--創建和啓動線程
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.