请教,如何终止一个java的线程 java线程 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 1.可以自己设置一个标志位flag,加一个while循环,当让它运行时设置为true,不想让它运行时设置flase;2. 用interrupt 当出现sleep时会出现异常,进不去停止; 用标志位,根据标志位去break。 感觉没有地方放这个循环啊,举个例子吧,我的程序类似于:a();b();c();按顺序调用这3个函数,每个函数可能会执行1分钟。我希望在任意时刻能够中断。按照标志位的想法,我是不是需要在每一个函数中都判断这个标志位,先中断函数的执行,再中断我的这个线程? private boolean closed=true;public void setClosed(boolean closed){ this.closed =closed;}public void run(){while(close){ .............}} 线程推出,执行完了就会推出interrupt终止线程主要是终止那种因为阻塞而迟迟无法执行完的那种线程,当然也包括复杂计算导致执行时间很长的线程。对于阻塞的线程,interrupt的响应是自动的,某些无法被interrupt拿它是没办法的。某些会响应interrupt的阻塞会自动抛出异常,例如sleep。对于长时间计算的线程,需要你自己去检查Thread的interrupt标志,如果interrupt已经被设置,就应该响应,可以抛出interrupt异常也可以自己设计出口直接将线程结束掉。 看过这篇文章,文章也提了,标志位的方法适合于程序循环运行时,因为循环可以保证定时检查标志位。而我的程序是线性执行的,不太可能每执行一部操作就写一个语句来判断标志位的状态。而对于interrupt的方法,我的程序没有sleep的状态,所以应该不太适用于抛出异常的方法。而判断interrupt状态的方法,同样需要定期判断这个状态,感觉上和标志位的方法差不多,同样没法很好的解决问题。 检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。 检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。你想要在不侵入线程本身逻辑的情况下让它随时可以结束么?如果你这样想,很明确的告诉你做不到。如果你是想要退出主程序,可以考虑把线程变成守护线程,让其不影响你主线程退出。或者可以考虑把线程升级为进程,这样你可以任意操作它的状态 检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。你想要在不侵入线程本身逻辑的情况下让它随时可以结束么?如果你这样想,很明确的告诉你做不到。如果你是想要退出主程序,可以考虑把线程变成守护线程,让其不影响你主线程退出。或者可以考虑把线程升级为进程,这样你可以任意操作它的状态程序的入口是一个JavaFX的界面,点击一个按钮后会开始执行一个查询的线程。现在想达到的目的是,在界面上增加一个终止按钮,结束当前的查询,但影响我的界面线程。 检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。你想要在不侵入线程本身逻辑的情况下让它随时可以结束么?如果你这样想,很明确的告诉你做不到。如果你是想要退出主程序,可以考虑把线程变成守护线程,让其不影响你主线程退出。或者可以考虑把线程升级为进程,这样你可以任意操作它的状态程序的入口是一个JavaFX的界面,点击一个按钮后会开始执行一个查询的线程。现在想达到的目的是,在界面上增加一个终止按钮,结束当前的查询,但影响我的界面线程。写错了,需要终止查询线程,但不影响我的界面线程。 检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。你想要在不侵入线程本身逻辑的情况下让它随时可以结束么?如果你这样想,很明确的告诉你做不到。如果你是想要退出主程序,可以考虑把线程变成守护线程,让其不影响你主线程退出。或者可以考虑把线程升级为进程,这样你可以任意操作它的状态程序的入口是一个JavaFX的界面,点击一个按钮后会开始执行一个查询的线程。现在想达到的目的是,在界面上增加一个终止按钮,结束当前的查询,但影响我的界面线程。写错了,需要终止查询线程,但不影响我的界面线程。所以其实你的问题不在于你要终止查询,你的问题出在:你不该在一个客户端应用里,把一个长时间计算的操作放在主线程里。你应该把这个查询变成异步的,查完了通知主线程显示,如果主线程已经不想查了可以直接忽略查询结果。这样你的长时间计算的线程就不会阻塞你的主线程(让界面看起来像没响应一样),并且你也不需要去关系你的异步查询线程到底执行完了没有(用户不想看了直接抛弃这个线程让它慢慢跑就行了)。虽然还是会占用你的机器的计算资源,但是不影响你的程序。最好的做法还是在计算中去检测线程的interrupt标志。 检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。你想要在不侵入线程本身逻辑的情况下让它随时可以结束么?如果你这样想,很明确的告诉你做不到。如果你是想要退出主程序,可以考虑把线程变成守护线程,让其不影响你主线程退出。或者可以考虑把线程升级为进程,这样你可以任意操作它的状态程序的入口是一个JavaFX的界面,点击一个按钮后会开始执行一个查询的线程。现在想达到的目的是,在界面上增加一个终止按钮,结束当前的查询,但影响我的界面线程。写错了,需要终止查询线程,但不影响我的界面线程。所以其实你的问题不在于你要终止查询,你的问题出在:你不该在一个客户端应用里,把一个长时间计算的操作放在主线程里。你应该把这个查询变成异步的,查完了通知主线程显示,如果主线程已经不想查了可以直接忽略查询结果。这样你的长时间计算的线程就不会阻塞你的主线程(让界面看起来像没响应一样),并且你也不需要去关系你的异步查询线程到底执行完了没有(用户不想看了直接抛弃这个线程让它慢慢跑就行了)。虽然还是会占用你的机器的计算资源,但是不影响你的程序。最好的做法还是在计算中去检测线程的interrupt标志。现在的查询不在主线程中,而是单独起的子线程,所以我的界面不会没响应。之所以说要终止查询,是因为我的操作时要登陆其他的设备进行操作的,我需要在保证在终止查询之后进行一些收尾操作。如果前端看起来已经终止了,我开始在界面中进行其他操作,而线程还在后台在不知道的时候操作设备,这样可能会造成更大的麻烦。 java数组去重复再排序思路 如何用java监听Modem读取来电显示号码!! 问个文件流的问题 新手急求答案 谁能给解释一下框架是什么意思 聊天程序小问题 两道JAVA面试题 急~~~~~~~~~~ 关于corba的问题 关于LIST中元素更换位置的问题~~~ 关于Tomcat常常自己停掉服务的问题? Generics 关于Double和Float的疑问
2. 用interrupt 当出现sleep时会出现异常,进不去停止;
感觉没有地方放这个循环啊,举个例子吧,我的程序类似于:
a();
b();
c();
按顺序调用这3个函数,每个函数可能会执行1分钟。我希望在任意时刻能够中断。按照标志位的想法,我是不是需要在每一个函数中都判断这个标志位,先中断函数的执行,再中断我的这个线程?
this.closed =closed;
}public void run(){while(close){ .............
}
}
看过这篇文章,文章也提了,标志位的方法适合于程序循环运行时,因为循环可以保证定时检查标志位。
而我的程序是线性执行的,不太可能每执行一部操作就写一个语句来判断标志位的状态。而对于interrupt的方法,我的程序没有sleep的状态,所以应该不太适用于抛出异常的方法。
而判断interrupt状态的方法,同样需要定期判断这个状态,感觉上和标志位的方法差不多,同样没法很好的解决问题。
检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。
检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。你想要在不侵入线程本身逻辑的情况下让它随时可以结束么?
如果你这样想,很明确的告诉你做不到。如果你是想要退出主程序,可以考虑把线程变成守护线程,让其不影响你主线程退出。
或者可以考虑把线程升级为进程,这样你可以任意操作它的状态
检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。你想要在不侵入线程本身逻辑的情况下让它随时可以结束么?
如果你这样想,很明确的告诉你做不到。如果你是想要退出主程序,可以考虑把线程变成守护线程,让其不影响你主线程退出。
或者可以考虑把线程升级为进程,这样你可以任意操作它的状态程序的入口是一个JavaFX的界面,点击一个按钮后会开始执行一个查询的线程。
现在想达到的目的是,在界面上增加一个终止按钮,结束当前的查询,但影响我的界面线程。
检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。你想要在不侵入线程本身逻辑的情况下让它随时可以结束么?
如果你这样想,很明确的告诉你做不到。如果你是想要退出主程序,可以考虑把线程变成守护线程,让其不影响你主线程退出。
或者可以考虑把线程升级为进程,这样你可以任意操作它的状态程序的入口是一个JavaFX的界面,点击一个按钮后会开始执行一个查询的线程。
现在想达到的目的是,在界面上增加一个终止按钮,结束当前的查询,但影响我的界面线程。
写错了,需要终止查询线程,但不影响我的界面线程。
检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。你想要在不侵入线程本身逻辑的情况下让它随时可以结束么?
如果你这样想,很明确的告诉你做不到。如果你是想要退出主程序,可以考虑把线程变成守护线程,让其不影响你主线程退出。
或者可以考虑把线程升级为进程,这样你可以任意操作它的状态程序的入口是一个JavaFX的界面,点击一个按钮后会开始执行一个查询的线程。
现在想达到的目的是,在界面上增加一个终止按钮,结束当前的查询,但影响我的界面线程。
写错了,需要终止查询线程,但不影响我的界面线程。所以其实你的问题不在于你要终止查询,你的问题出在:
你不该在一个客户端应用里,把一个长时间计算的操作放在主线程里。你应该把这个查询变成异步的,查完了通知主线程显示,如果主线程已经不想查了可以直接忽略查询结果。这样你的长时间计算的线程就不会阻塞你的主线程(让界面看起来像没响应一样),并且你也不需要去关系你的异步查询线程到底执行完了没有(用户不想看了直接抛弃这个线程让它慢慢跑就行了)。虽然还是会占用你的机器的计算资源,但是不影响你的程序。最好的做法还是在计算中去检测线程的interrupt标志。
检查interrupt标志感觉和自定义标志位类似,同样需要定期的去检查这个标志位。目前的程序比较复杂,感觉上每执行一步就去判断interrupt状态不太现实。你想要在不侵入线程本身逻辑的情况下让它随时可以结束么?
如果你这样想,很明确的告诉你做不到。如果你是想要退出主程序,可以考虑把线程变成守护线程,让其不影响你主线程退出。
或者可以考虑把线程升级为进程,这样你可以任意操作它的状态程序的入口是一个JavaFX的界面,点击一个按钮后会开始执行一个查询的线程。
现在想达到的目的是,在界面上增加一个终止按钮,结束当前的查询,但影响我的界面线程。
写错了,需要终止查询线程,但不影响我的界面线程。所以其实你的问题不在于你要终止查询,你的问题出在:
你不该在一个客户端应用里,把一个长时间计算的操作放在主线程里。你应该把这个查询变成异步的,查完了通知主线程显示,如果主线程已经不想查了可以直接忽略查询结果。这样你的长时间计算的线程就不会阻塞你的主线程(让界面看起来像没响应一样),并且你也不需要去关系你的异步查询线程到底执行完了没有(用户不想看了直接抛弃这个线程让它慢慢跑就行了)。虽然还是会占用你的机器的计算资源,但是不影响你的程序。最好的做法还是在计算中去检测线程的interrupt标志。
现在的查询不在主线程中,而是单独起的子线程,所以我的界面不会没响应。
之所以说要终止查询,是因为我的操作时要登陆其他的设备进行操作的,我需要在保证在终止查询之后进行一些收尾操作。
如果前端看起来已经终止了,我开始在界面中进行其他操作,而线程还在后台在不知道的时候操作设备,这样可能会造成更大的麻烦。