可以同時執行多個程式區塊,使程式執行的效率變高
範例:
列印100次Hello(單執行緒)
1 2 3 4 5 6 7 8 9 10 11 | public class Test1 { public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println("MAin Hello " + i); } } } |
MAin Hello 0
MAin Hello 1
MAin Hello 2
MAin Hello 3
MAin Hello 4
.....
MAin Hello 97
MAin Hello 98
MAin Hello 99
多執行緒:建立一個hello class 繼承 Thread,將迴圈寫在執行緒的實作mothod
在原本main迴圈下,新增兩組執行緒
有三個執行緒在執行,main 執行緒執行 main() ,建立了另外兩個執行緒 h1 與 h2
h1和h2沒有先後之分,完全取決於程式
且每次執行結果不會一樣,每個執行緒分配到多少時間是不固定的1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | //建立執行緒 class Hello extends Thread { public void run() { //執行緒實作的方法,工作內容 for (int i = 0; i < 100; i++) { System.out.println(getName()+" hello " + i); } } } public class Test1 { public static void main(String[] args) { //main 執行緒執行 main() //main() for (int i = 0; i < 100; i++) { System.out.println("MAin Hello " + i); } //建立 h1 執行緒 Hello h1 = new Hello(); h1.setName("h1"); //指定執行緒名稱 //h1.run(); //呼叫,使用此方法還是單執行緒 h1.start(); //啟動 h1 執行緒,不是呼叫 Thread,而是要啟動 //建立 h2 執行緒 Hello h2 = new Hello(); h2.setName("h2"); h2.start(); } } |
MAin Hello 97
MAin Hello 98
MAin Hello 99
h2 hello 0
h1 hello 0
h2 hello 1
當執行緒 start( ) 後,不能重複啟動,否則會導致 IlleagalThreadStateException 例外
多執行緒摘要
- 執行順序執行順序 與 程式開工(啟動)順序無關,由系統控制
- 每個執行緒所分配到的 CPU 時間不是固定的,由系統控制
- 執行緒啟動後,由系統分配時間執行 run( ) ,我們不會自己主動去呼叫 run( )
- 主類別 main() 方法的執行,是由系統產生的 main執行緒 執行
- 執行緒 start( ) 後,不能重複啟動,會導致例外
- 取得執行當前程式碼的執行緒
Thread.currentThread() - 取得 與 設定 執行緒物名稱
getName( )
setName( )
沒有留言:
張貼留言