我们一直以来都有一个错误的理解,认为interrupt会使线程停止运行,但事实上并非如此,调用一个线程的interrupt方法会把线程的状态改为
中断态,但是interrupt方法只作用于那些因为执行了sleep、wait、join方法而休眠的线程,使他们不再休眠,同时会抛出
interruptedexception异常。比如一个线程a正在sleep中,这时候另外一个程序里去调用a的interrupt方法,这时就会迫使
a停止休眠而抛出interruptedexception异常;而如果线程a没有处于上面提到的三种休眠状态时被interrupt,这样就只是把线程
a的状态改为interruptted,但是不会影响线程a的继续执行。
如何停止一个线程呢?用stop方法吗?肯定不行,这个方法由于不安全已经过时,不推荐使用,下面的例子提供了一个常用的停止线程的方法,例子
中在线程中引入一个属性来控制,当需要停止线程时,只需要调用shutdownthread()方法即可,因为在线程的run()方法中会循环检测这个属
性的值,为true正常运行,为false时不会进入循环,线程就可以结束.
public class teststopthread
{
public static void main(string args[]) {
runner r = new runner() ;
thread t = new thread(r) ;
t.start() ;
for(int i=0 ;i关注我收藏该文与我联系

======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
本文解释了中断方法如何改变线程状态并使其从休眠中恢复,而非真正停止线程。并提供了一种安全的方法来停止线程,通过引入控制属性来实现线程的优雅退出。
2057

被折叠的 条评论
为什么被折叠?



