1.建立一個類A,並繼承Thread類java
2.重寫A的run()方法多線程
3.建立A的實例對象b,即建立了線程對象ide
4.使用b調用start()方法:啓動線程(會自動調用run方法)操作系統
例如:線程
package 多線程; /* *1.建立兩個線程分別完成100之內奇數偶數的輸出 */ public class CreateThread { public static void main(String[] args){ Test1 t1 = new Test1(); Test2 t2 = new Test2(); t1.start(); t2.start(); } } //輸出偶數 class Test1 extends Thread { @Override public void run() { for (int i = 0; i < 50; i++) { if (i % 2 == 0) { System.out.println("線程一輸出偶數:"+i); } } } } //輸出奇數 class Test2 extends Thread{ @Override public void run() { for(int i =0; i < 50;i++){ if (i %2 != 0) { System.out.println("線程二輸出奇數:"+i); } } } } 線程一輸出偶數:0 線程一輸出偶數:2 線程一輸出偶數:4 線程二輸出奇數:1 線程二輸出奇數:3 線程二輸出奇數:5 .... 線程二輸出奇數:47 線程二輸出奇數:49 線程一輸出偶數:6 線程一輸出偶數:8
輸出結果省略了一部分,能夠看出來,兩個線程的執行是交替的,因此奇數和偶數也是交替輸出.code
定義子類A,實現Runnable接口。對象
子類中重寫Runnable接口中的run方法。繼承
經過Thread類含參構造器建立線程對象。接口
將Runnable接口的子類對象做爲實際參數傳遞給Thread類的構造器中。資源
調用Thread類的start方法:開啓線程,調用Runnable子類接口的run方法。
例如:
package 多線程; public class CreateThread2 { public static void main(String[] args){ Test3 t3 = new Test3(); Test4 t4 = new Test4(); //多態性 Thread t = new Thread(t3); Thread tt = new Thread(t4); t.start(); tt.start(); } } //輸出偶數 class Test3 implements Runnable{ @Override public void run() { for (int i = 0; i < 50; i++) { if (i % 2 == 0) { System.out.println("線程一輸出偶數:"+i); } } } } //輸出奇數 class Test4 implements Runnable{ @Override public void run() { for (int i = 0; i < 50; i++) { if (i % 2 != 0) { System.out.println("線程二輸出奇數:"+i); } } } } //結果和上一個相似
若是本身手動調用run()方法,那麼就只是普通方法,沒有啓動多線程模式。
run()方法由JVM調用,何時調用,執行的過程控制都有操做系統的CPU 調度決定。
一個線程對象只能調用一次start()方法啓動,若是重複調用了,則將出現異常。
1.繼承Thread:線程代碼存放Thread子類run方法中。
2.實現Runnable:線程代碼存在接口的子類的run方法。
3.實現方式的好處:
①避免了單繼承的侷限性
②多個線程能夠共享同一個接口實現類的對象,很是適合多個相同線 程來處理同一份資源
碼字不易,感謝支持。水平有限,不免錯漏和不許確,歡迎批評指正!