java實現多線程有兩種方式,一種是繼承Thread類,另外一種就是實現Runnable接口。
兩種實現方法的優缺點:
使用Thread類實現多線程局限性就是不支持多繼承,因為java是不支持類多繼承的,除此之外兩種多線程沒有任何區別。
(如果你想創建線程的類已經有一個父類了,那么你只能實現Runnable接口實現來多線程)
知識點一:多線程的執行順序是隨機的
代碼的運行結果與代碼的執行順序是無關的。簡單點說,就是多線程的執行順序是隨機的,這個是要看CPU調哪個,這個是不確定的。
下面我們可以看這段代碼:
public class Test01 extends Thread { @Override public void run() { super.run(); System.out.println(1111); } public static void main(String[] args) { Test01 test01 = new Test01(); test01.start(); System.out.println("運行結束"); } }
執行結果:
1111
運行結束
Process finished with exit code 0
但是看完之后好像沒什么雞兒的感覺.....
那么再看下面的吧,同時運行兩條線程,每條線程循環並打印出自己的線程名字:
/** * 兩條線程同時運行,並輸出各個線程的名字 */ public class Test01 extends Thread { @Override public void run() { super.run(); for (int i = 0; i < 1000; i++) { System.out.println("run=" + Thread.currentThread().getName()); } } public static void main(String[] args) { Test01 test01 = new Test01(); test01.setName("線程"); test01.start(); for (int i = 0; i < 1000; i++) { System.out.println("run=" + Thread.currentThread().getName()); } } }
因為各打印出1000次,所以我就復制一些有特點的打印語句吧:
run=線程 run=線程 run=main run=線程 run=線程 run=線程 run=線程 run=線程 run=main run=線程 run=線程 run=線程 run=線程 run=main
這次看到了么?雖然線程同時執行,但並不是有規律的,這個要看CPU調哪個線程,是無法控制的。