Re: [問題] 父親要怎麼被子thread叫醒?
※ 引述《workworkwork (專心K書?)》之銘言:
: ※ 引述《TonyQ (骨頭)》之銘言:
: : 兩個THREAD互相溝通就行啦
: : 最簡單的作法
: : 你可以 lock 其中一個thread
: : 直到收到另一個thread的訊息在解鎖就好了
: : [中略]
: : 以上這可能可以參考
: : 這些看你的實作 應該不難做@@
: 但是我不是二個thread要互相溝通啊@@~
: 我是下面的情況@@~
: 在A程式中執行B.start();
: 然後我想做的是讓A停下來等B的訊息進來~
: 請問一下這樣有方法嗎?
我想,你必須釐清你是應該用 method,或只是為了用 thread 而 thread...
若是 thread....
你的 B 物件(子)要有訊息給 A (父),再怎樣也要中間有可以溝通的物件,
也就是將被 B 所改變的值,或是 B 所執行的某個階段的 flag 在改變後讓
A 能取得。注意! 這是你要在 B Thread 尚未執行結束或是執行某個定點時
讓 A 由 sleep 恢復為 active 的做法。
若你要的只是 B Thread 結束之後才繼續執行 A ,哪麼直接用 join 就好了。
如果你用的是 join,就意義上來說,你的需求與呼叫一個 B method 沒有多
大的差異(如果你只有一個子Thread),用 method 其實比較實際些。
回頭看看現實面,你要等待一個 Thread 結束,是人工來控制比較好,或是
採用 join 其實見仁見智,但有時候你會發現,用 join 並不那麼的理想。
譬如要在 Midlet 中使用 HttpConnection,許多手機或模擬器會出現詢問畫
面,要你確認是否接受付費連線,而 HttpConnection 合法的使用方式是另
開一個 thread 來使用,但詢問畫面卻是由 Midlet 的主 Thread 來控制,
想當然爾,若你使用了join,整隻程式就會陷入 dead lock。
若這篇能讓你解決問題或是有更好的做法,請記得回來提供你解決方案回饋
給大家參考喔!
--
No Dying Skills, ● - Dame! New tech...
but Lazy Users. .\)
http://www.javaworld.com.tw/roller/page/morris﹒ ︵ √\ ___________________
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 211.74.120.71
討論串 (同標題文章)