※ 引述《nf7series (真呆)》之銘言:
: 執行的結果是
: started
: ran
: interrupting
: ended
: t.start()後,先去跑t執行緒的sleep(1000),然後跑main執行緒的印出started,
: 再來main執行緒暫停2秒,因此印出t執行緒的ran,接著印出main執行緒的interrupting,
: t.interrupt()後再印出ended
基本上執行流程正確,
但我認為這樣的敘述仍然有些瑕疵,
像是呼叫 t.start() 後,不一定會先去執行該執行緒中的 sleep(1000),
(根據我的經驗,會先繼續執行 main,不過你應該假設為"不一定")
: 以上解釋不知道是否正確,另外,t.interrupt()之前t執行緒都跑完了,為何還能interrupt
: 呢?
根據 API 說明,
"Interrupting a thread that is not alive need not have any effect."
我認為這只是設計者的決定。
這當然也是有可能設計成,
如果這個 thread 已經執行完畢後,再被呼叫 interrupt() 時丟出一個 exception,
只是也許設計者並不認為這樣做會比較好。
不過以 thread 的角度來看,我也認為目前的設計比較好。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.170.163