Re: [問題] thread run VS start

看板java作者 (全新開始)時間10年前 (2013/11/19 08:25), 編輯推噓3(304)
留言7則, 4人參與, 最新討論串2/2 (看更多)
※ 引述《togs (= =")》之銘言: : 之前寫的程式不斷出錯,上網查才大略知道thread 的run和start差異 : 在網路上看到的講義, : 講義裡做出label(圖片)移動的方式是用thread.start(); : 但當我將thread放在method裡頭時,例如: : static void voidTestInVoid(){ : System.out.println("voidTestInVoid beginning"); : thread = new addThread1("abc"); //print出abc : thread.start(); : thread = new addThread1("cde"); : thread.start(); : System.out.println("voidTestInVoid end"); : } : 我發現在執行 voidTestInVoid(); 時 : 每次執行print出來的文字順序都會不一樣,特別是不會從上而下照順序執行 你知道 thread 是什麼東西嗎? 這是執行緒 你呼叫 start 的時候,jvm會幫你開一個執行緒, 在新的執行緒執行 thread 裡面 run 方法的內容。 呼叫 run 的話就只是在原本的執行緒執行一個很普通的方法。 就結果而言,為了強化效能, jvm 本來就不保證跨執行緒的程式在編譯成byte code 之後 彼此之間有什麼固定的執行順序, 而在同一個執行緒的程式則有一定的先後順序關係, 因此呈現在同一個命令列裡面的文字順序每次都不一樣是很正常的。 先去了解一下執行緒的觀念,你就不會有我刪掉的後面這些問題 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.168.65.88

11/19 10:13, , 1F
感謝,您解釋地相當清楚:) 我確實沒將thread搞懂 受教了:)
11/19 10:13, 1F

11/19 10:43, , 2F
是 multi-thread 本身的特性,跟 JVM 與否應該無關
11/19 10:43, 2F
多執行緒函式庫的實作都有規格,就算有慣例的做法, 但規格沒限制的地方,沒有什麼是「天性如此」的。 我相信願意找的話一定會有某個 jvm 實作執行他的程式以後, 在命令列的輸出結果符合他原本的預期,但我要強調不管哪一種輸出結果都不用意外

11/19 10:52, , 3F
run()只是單純的去call run()裡面的程式碼而已
11/19 10:52, 3F

11/19 10:56, , 4F
跟你隨便做一個class跑裡面的method一樣 這樣比較好懂?
11/19 10:56, 4F
※ 編輯: dream1124 來自: 118.168.124.48 (11/19 19:20)

11/20 06:50, , 5F
相當好懂:) many thanks^^
11/20 06:50, 5F

11/24 01:22, , 6F
繷W格有什麼關係? 是scheduling 還有context switch
11/24 01:22, 6F

11/24 01:23, , 7F
規格
11/24 01:23, 7F
文章代碼(AID): #1IYg_lh8 (java)
討論串 (同標題文章)
文章代碼(AID): #1IYg_lh8 (java)