Java之多執行緒易範錯誤
阿新 • • 發佈:2019-01-03
執行後的結果如下:public class mainTestImpl { /* * 任何執行緒一般具有五種狀態,即建立、就緒、執行、阻塞、終止 執行緒 呼叫stop()方法時或run()方法執行 * 結束後,執行緒即處於死亡狀態。 處於死亡狀態的執行緒不具有繼續執行的能力。 */ public static void main(String[] args) { testThread t = new testThread(); t.run(); // start是啟動一個執行緒由程式來呼叫run方法 // run 是執行一個方法,等結束以後再執行後面的程式碼,不能達到多執行緒目的 System.out.println(Thread.currentThread().getName() + " 執行緒執行結束!"); } } // 通過類繼承必須有run方法,因為start啟動執行緒後由程式呼叫run方法 // Thread同樣實現了Runnable介面 class testThread extends Thread { public void run() { for (int i = 0; i < 5; i++) { try { Thread.currentThread().sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("runnable=" + Thread.currentThread().getName() + " " + i); } //new threadImp().run(); } }
runnable=main 0
runnable=main 1
runnable=main 2
runnable=main 3
runnable=main 4
main 執行緒執行結束!
可以看到都是main執行緒在執行,並不是期望的多執行緒。原因就在於呼叫了run()方法,將如上對應程式碼段改為如下後執行:t.start(); // start是啟動一個執行緒由程式來呼叫run方法
// run 是執行一個方法,等結束以後再執行後面的程式碼,不能達到多執行緒目的
main 執行緒執行結束! runnable=Thread-0 0 runnable=Thread-0 1 runnable=Thread-0 2 runnable=Thread-0 3 runnable=Thread-0 4
修改testThread執行緒類並且增加一個實現Runnable介面的執行緒類,程式碼如下:
通過mainTestImpl類中的testThread類的run方法來啟動另外一個執行緒,發現執行的結果還是單執行緒,不知道為什麼。。。。。。。// 通過類繼承必須有run方法,因為start啟動執行緒後由程式呼叫run方法 // Thread同樣實現了Runnable介面 class testThread extends Thread { public void run() { new threadImp().run(); // 啟動執行緒 } } class threadImp implements Runnable { // 執行緒的幾個狀態,判斷屬性,計數次數,同步方法 public void run() { for (int i = 0; i < 50; i++) { System.out.println("runnable=" + Thread.currentThread().getName() + " " + i); } } }