一丶繼承Thread類實現多線程
第一步:繼承Thread類
第二步:重寫run()方法
第三步:創建繼承了Thread類的對象 , 調用start()方法啟動。
//線程創建方式一 : /* 第一步:繼承Thread類 第二步:重寫run()方法 第三步:創建繼承了Thread類的對象 , 調用start()方法啟動。 */ public class TestThread extends Thread{ @Override public void run() { for (int i = 0; i < 3000; i++) { System.out.println("愛你三千遍"); } } public static void main(String[] args) { TestThread testThread = new TestThread(); testThread.start(); } }
二丶實現Runnable接口創建多線程
第一步:實現runnable接口
第二步:沖寫run方法
第三步:創建實現類對象,創建代理類thread類對象 +start()方法啟動線程
public class Thread_Study implements Runnable{ /* * 第一步:實現runnable接口 * 第二步:沖寫run方法 * 第三步:創建實現類對象,創建代理類thread類對象 +start()方法啟動線程 * * */ @Override public void run() { for (int i = 0; i < 100; i++) { System.out.println("看書"); } } public static void main(String[] args) { Thread_Study ts = new Thread_Study(); new Thread(ts).start(); for (int i = 0; i < 100; i++) { System.out.println("敲代碼"); } } }
運行結果:
敲代碼
敲代碼
敲代碼
敲代碼
敲代碼
敲代碼
敲代碼
敲代碼
看書
看書
看書
看書
看書
看書
看書
結論:
我們可以觀察到敲代碼和看書同時進行每個線程之間是不相互干涉的,各自執行各自的,這和調用方法不同,調用方法是等到上一個步驟執行完成才可以在執行下一個步驟.