终止线程

 由于java放弃了自己的stop方法,导致我们终止一个线程变得困难[其实有stop也困难,可能导致死锁,你敢用哇?]。以下根据不同的情况,给出不同的解决办法。

     1.线程里面是一个循环

      这样的终止线程是最简单的,只需要设置一个标志位,在循环检查的时候,就可以跳出线程,代码如下:

     

    但是这样其实是“假终止”,很有可能,在我们设置停止线程的时候,线程跑了最后一次。

    2.线程因为sleep,wait,join等方法进入“假死”状态

      这种情况,我们可以借助于java多线程中的interrupt方法,产生一个InterruptedException异常,从而跳出线程。代码如下:

    

   3.线程因为获取网络数据等原因阻塞

     在这里,暂时找不到让线程停止的方法,其实根据java多线程原理,多线程由虚拟机模拟,而线程一旦执行,是交给操作系统来完成的,所以,不管用什么方法,我们都不可能从系统级别终止一个启动的任务[就比如第一个例子中,如果进入while中,那这一次循环就不容易终止了]。但是很有可能其他线程在等待这个线程返回结果,而本线程又阻塞,那么这个时候折中的处理办法就是采用计时器,一旦超时,则通知等待线程。等待线程做出相应处理。

      首先是一个计时器:

    

 

    可能的阻塞线程类:

   

    接收数据类:

   

 

   辅助接口:

  

  

  测试:

        

    

    

附加:

     有些兄弟觉得Timer和TimerTask的组合可以做到终止线程[timer.cancle],是不正确的,它只可以把还没有执行的线程取消掉,但是并不能终止正在执行的线程

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值