[爆卦]java多執行緒範例是什麼?優點缺點精華區懶人包

為什麼這篇java多執行緒範例鄉民發文收入到精華區:因為在java多執行緒範例這個討論話題中,有許多相關的文章在討論,這篇最有參考價值!作者Hiigara (西亞加拉)看板java標題Re: [問題] 新手Thread (執行緒問題)時...


※ 引述《TWTRubiks (阿哲)》之銘言:
: 想說老師還沒教,就自己先看看,不過遇到了一些問題
: 以下為課本範例程式碼:
http://pastebin.com/vMXvWb1m


結果好像沒人回答問題 A...

// 這裏我就有問題了Thread.currentThread(),我看書上寫
// 類別方法,可以取得目前的執行緒物件s
// 老實說我不太懂他的意思



這裡分成兩個部份各自簡單的來談,什麼是執行緒,跟Java 的 Thread 物件



一個執行緒(也就是英文寫作 thread 的那個東西)大致可以想成

「一件從頭循序執行到尾的工作」


例如一個廚師依照食譜的說明做一道菜的過程。

而今天我可能程式(廚房)裏面想要同時同時做兩三件工作,於是可憐的廚師就得要
一邊煮魚翅一邊削水果。


兩個執行緒彼此是不同步的,不一定誰會先做完誰會後做完。
就像魚翅什麼時候會燒焦跟水果削了幾顆,這兩者之間是沒有直接關聯的。



執行緒要討論還有很多鬼東西,不過先知道到這裡就好,剩下請洽恐龍本...
我絕對不會承認我只懂到這邊(遮臉





Java 為了方便寫程式的人管理多執行緒的程式,為程式設計師提供了一個 Thread 物件
管理執行續。當寫程式的人 new 一個 Thread 出來,並且呼叫該 Thread 的 start(),
Java 會啟動一個新的執行緒,並且用那個執行續來跑塞入的 Runnable 的 run()


可以看成 Java 把執行緒這件事情分成兩個部份:

- Runnable: 執行緒實際要執行的工作物件
- Thread: 執行緒管理員物件



而 Thread.currentThread(),他的功能是「取得現在這個執行緒的管理員物件」



這邊一個討論上可能出現的陷阱是,當其他寫 Java 的人講「thread」的時候
可能是指「執行緒」這個概念,也可能是指 Java 的 Thread 物件

還不熟的時候要多花一點心力去分辨這兩者


: 結果印出:
: 執行緒:Thread[main,5,main]
: Thread[執行緒 A,5,main]總和=15
: Thread[執行緒 B,5,main]總和=10
: //[執行緒 A,5,main] 這裏面第1個 執行緒 A (是名稱),那第2個"5"是指甚麼?!
: 而第3個 main是代表在主程式下執行?!

: 結果我打
: System.out.println("t1="+t1.toString());
: System.out.println("t2="+t2.toString());
: 竟然結果和
: System.out.println(Thread.currentThread());
: 2種寫法幾乎完全一樣?!
Thread t = Thread.currentThread();
System.out.println(t)

會呼叫到 out 這個 PrintStream 的 println(Object o)。

而餵給 println() 的參數是物件的時候,印出來的東西就會是該物件的 toString()
回傳的字串。


另,用字串跟某個物件相加的時候,結果也會是拿該字串跟物件的 toString() 吐出的
字串相接在一起的新字串


所以,不論是

System.out.println("執行緒: " + Thread.currentThread());
System.out.println("t2="+t2.toString());
System.out.println(Thread.currentThread());

最後結果印出來的東西中間都會有一段是該 Thread 物件的 toString() 的結果


於是你知道了,去找 Thread 的 toString() 的文件或許可以找到你要的答案


參照官方 Javadoc, Thread 的 toString()
http://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#toString%28%29

Returns a string representation of this thread, including the thread's name,
priority, and thread group.



所以「Thread[main,5,main]」裡面,括號裏面的東西分別是

thread's name
priority
thread group


thread 的名稱感覺很直覺,至於優先權跟群組....看起來像是上面沒出現過的新名詞
不過至少有方向可以查了,對吧 :P


例如說 google

「java thread priority」「java 執行緒 優先權」
「java thread group」「java 執行緒 群組」

就能找到關於「那是什麼」的資訊





然後你會發現一個晚上就這樣不見了 :P


--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.47.149.153
※ 編輯: Hiigara 來自: 114.47.149.153 (12/01 23:38)
AtarashiAko:我覺得一個晚上應該不夠吧XD 12/02 03:24

你可能也想看看

搜尋相關網站