由于java放弃了自己的stop方法,导致我们终止一个线程变得困难[其实有stop也困难,可能导致死锁,你敢用哇?]。以下根据不同的情况,给出不同的解决办法。
1.线程里面是一个循环
这样的终止线程是最简单的,只需要设置一个标志位,在循环检查的时候,就可以跳出线程,代码如下:
但是这样其实是“假终止”,很有可能,在我们设置停止线程的时候,线程跑了最后一次。
2.线程因为sleep,wait,join等方法进入“假死”状态
这种情况,我们可以借助于java多线程中的interrupt方法,产生一个InterruptedException异常,从而跳出线程。代码如下:
3.线程因为获取网络数据等原因阻塞
在这里,暂时找不到让线程停止的方法,其实根据java多线程原理,多线程由虚拟机模拟,而线程一旦执行,是交给操作系统来完成的,所以,不管用什么方法,我们都不可能从系统级别终止一个启动的任务[就比如第一个例子中,如果进入while中,那这一次循环就不容易终止了]。但是很有可能其他线程在等待这个线程返回结果,而本线程又阻塞,那么这个时候折中的处理办法就是采用计时器,一旦超时,则通知等待线程。等待线程做出相应处理。
首先是一个计时器:
可能的阻塞线程类:
接收数据类:
辅助接口:
测试:
附加:
有些兄弟觉得Timer和TimerTask的组合可以做到终止线程[timer.cancle],是不正确的,它只可以把还没有执行的线程取消掉,但是并不能终止正在执行的线程