Re: [問題] 如何中斷跑到一半的程式
※ 引述《LaPass (LaPass)》之銘言:
: 以下範例徒手key的,可能會打錯字,以及少做try...catch之類的
: 請自已修正
: 法一:
: Thread + 設個flag去判斷
: class UI{
: ...
: ....
: Thread t;
: boolean b=true;
: public void StartButton(){
: t=new Thread(new Runnable(){
: void run(){
: while(b)
: {
: //要做的一些事情
: }
: }
: });
: }
: public void StopButton(){
: b=false;
: }
: }
: 這種方法比較好,有些東西做到一半被停掉的話會很麻煩
: 用flag的方式比較能讓程式自己決定該不該中止,以及把一些該收尾的事情做一做
: 但這也只適用於迴圈類型的程式
: 法二:
: class UI{
: ...
: ....
: Thread t;
: public void StartButton(){
: t=new Thread(new Runnable(){
: void run(){
: //要做的一些事情
: }
: });
: }
: public void StopButton(){
: if(t!=null)t.interrupt();
: }
: }
: 用interrupt去中斷他
: 但是,印象中如果有像這樣的片段
: try { }
: finally { }
: 會直接被中斷掉,而不會去做finally的動作去收尾
: 還有,如果是第一次使用執行緒的話
: 請去看一下關於執行緒安全之類的問題、文章
直接呼叫interrupt()並不會中止執行緒
要做到可以用stop()
但是不安全,因為程序可能會在任何地方中止而發生不可預期的錯誤
所以還要在程序中可以安全中斷的地方加入判斷式
if(t.isInterrupted())break;
如果是被sleep、join、wait阻斷時就用try catch捕捉
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
break;
}
還有就算你在上面的try catch後面加finally
他還是會執行
finally一定會執行,除非你下System.exit()關掉JVM或是你電腦當機
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.156.136
※ 編輯: pzyc79 來自: 118.160.156.136 (08/30 02:29)
推
08/30 09:00, , 1F
08/30 09:00, 1F
推
08/31 00:21, , 2F
08/31 00:21, 2F
→
08/31 00:23, , 3F
08/31 00:23, 3F
→
08/31 00:48, , 4F
08/31 00:48, 4F
討論串 (同標題文章)