Re: [問題] thread run VS start
※ 引述《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
11/19 10:13, 1F
→
11/19 10:43, , 2F
11/19 10:43, 2F
多執行緒函式庫的實作都有規格,就算有慣例的做法,
但規格沒限制的地方,沒有什麼是「天性如此」的。
我相信願意找的話一定會有某個 jvm 實作執行他的程式以後,
在命令列的輸出結果符合他原本的預期,但我要強調不管哪一種輸出結果都不用意外
→
11/19 10:52, , 3F
11/19 10:52, 3F
→
11/19 10:56, , 4F
11/19 10:56, 4F
※ 編輯: dream1124 來自: 118.168.124.48 (11/19 19:20)
推
11/20 06:50, , 5F
11/20 06:50, 5F
推
11/24 01:22, , 6F
11/24 01:22, 6F
→
11/24 01:23, , 7F
11/24 01:23, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):