看板 java 關於我們 聯絡資訊
※ 引述《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)
LaPass:瞭解了 感謝 08/30 09:00
f0987654:若根據p大講解,stop() deprecated之後 08/31 00:21
f0987654:已經沒有辦法可以直接中斷thread,而是程式裡中斷? 08/31 00:23
pzyc79:stop()還是可以作用 不過就如上面所說的 能不用就不要用 08/31 00:48