[問題] 兩個 Thread 疑問
最近寫了一個 multi thread 程式
有使用到 ThreadPoolExecutor 之類的東西
也有用到 synchronized method 或是 lock 之類的東西
當然有程式有包含錯誤處理(try catch),目前使用沒遇到狀況
不過主管對程式有些看法是我不能理解的,以下模擬對話內容
主管: 萬一Thread消失怎麼辦?
cyclone350: 消失? Thread 本身如果有錯誤,有 try catch 作錯誤處理
Thread 執行最外層也有執行錯誤處理 (送 mail, 寫 log 之類的)
主管: 不,我是說 Thread 消失了,try catch 也不會知道,但是你的程式
卻正常執行。
cyclone350: ......?
主管: 你要怎麼確保Thread不會消失? 或是讓Thread消失後可以被偵測到?
cyclone350: ...? 若 Thread 發生錯誤,有錯誤處理,我不瞭解消失是...?
主管: 就是Thread消失了,但是JVM沒發覺,程式卻正常執行的情況
cyclone350: ......? 如果 Thread 從系統裡蒸發.. 而JVM卻沒察覺的話...
我的錯誤處理並沒有防堵這種狀況....
主管: 必須想出一種機制能夠讓別人知道程式是正常運作的
-----------------------------------------------------------
其實我私心覺得這種情況似乎不會發生,就算發生了好像也不會是ap的問題...
如果真的有這種情況發生了,那所有 multi thread 程式不就不用玩了?
呼叫 synchronized method 後消失... 那整個 application 不就掛點了?
全部都在 wait... lock機制也是一樣...
我有去找 ThreadPoolExecutor 的 source code... 我看 Thread 也只是被 worker
包裹起來跑
try {
task.run();
} catch (RuntimeException x) {
thrown = x; throw x;
} catch (Error x) {
thrown = x; throw x;
} catch (Throwable x) {
thrown = x; throw new Error(x);
} finally {
afterExecute(task, thrown);
}
task 跑到一半會消失? 這甚麼道理? try catch 不就形同虛設了嗎?
請問在開發 multi Thread 時真的會有這種情況發生嗎?
如果真的有這情況,各位大大是怎麼處理?
---------------------
另外想請問程式暫停除了 Thread.sleep 還有其他的方式嗎?
我最近有看 apache 某專案設定 time out 是用 Thread.sleep
或是用 while 迴圈,裡面是 thread.sleep 停止 1 ms 直到時間到為止
不過之後可能會被問一個問題
"萬一 Thread.sleep 之後就起不來,然後程式也沒跳任何錯誤
(意味 Exception 及 Error 不會 trigger),怎麼辦?"
所以還蠻想找一個替代方案的
-----------------------
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.193.192.133
※ 文章網址: https://www.ptt.cc/bbs/java/M.1421672239.A.D34.html
→
01/19 22:54, , 1F
01/19 22:54, 1F
→
01/19 22:57, , 2F
01/19 22:57, 2F
推
01/20 01:47, , 3F
01/20 01:47, 3F
→
01/20 09:49, , 4F
01/20 09:49, 4F
→
01/20 09:49, , 5F
01/20 09:49, 5F
推
01/20 15:52, , 6F
01/20 15:52, 6F
謝大家回應,結論就是 Thread 不會蒸發 :)
n大及良葛格回應的可能情況在我的程式功能也有處理
另外 mozzan 大大說明的狀況我想討論一下
若 os 的排班制度很差的話,的確有可能全部會餓死 (永遠執行不到)
但是以現在的 os 情況,在正常狀況下會餓死嗎?
我認為是不會的,畢竟 os 已經發展很長一段時間了,
os 開發人員應該會極其避免這種狀況且持續精進
所以換句話說,如果你開的Thread會餓死,那 os 也差不多要掛了 (loading到極限)
所以也不會是 ap 層要考慮的狀況
以上是我的想法
※ 編輯: cyclone350 (123.193.192.133), 01/20/2015 20:19:26
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 1 之 7 篇):