作者pzyc79 (五薀皆空)
看板java
标题Re: [问题] 如何中断跑到一半的程式
时间Thu Aug 30 02:27:00 2012
※ 引述《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)
1F:推 LaPass:了解了 感谢 08/30 09:00
2F:推 f0987654:若根据p大讲解,stop() deprecated之後 08/31 00:21
3F:→ f0987654:已经没有办法可以直接中断thread,而是程式里中断? 08/31 00:23
4F:→ pzyc79:stop()还是可以作用 不过就如上面所说的 能不用就不要用 08/31 00:48