ThreadService java_java线程基础巩固---Thread API综合实战之编写ThreadService实现暴力结束线程...

上篇中在最后抛出一个问题,具体问题可以查看此篇【http://www.cnblogs.com/webor2006/p/7995229.html】,这里不再概述,其实要实现这个需求可以用咱们之前学习的守护线程来解决,守护的场景跟我们想要的需求也很类似啦,下面看下如何来实现这样的目标:

首先新建一个类用来包装线程的执行与停止,如下:

public classThreadService {/*** 执行一个线程

**/

public voidexecute(Runnable task) {//TODO

}/*** 强制停止执行线程,最多等待mills时间,如果超过这个时间则会强制停止

**/

public void shutDown(longmills) {//TODO

}

}

然后再new一个线程:

public classThreadService {private Thread executeThread;/*** 执行一个线程*/

public voidexecute(Runnable task) {

executeThread= new Thread(new Runnable() {

@Override

public voidrun() {

}

});

executeThread.start();

}/*** 强制停止执行线程,最多等待mills时间,如果超过这个时间则会强制停止*/

public void shutDown(longmills) {//TODO

}

}

然后到核心的关键啦,再executeThread时面再new一个守护线程来执行这个task,如下:

public classThreadService {privateThread executeThread;/*** 执行一个线程*/

public voidexecute(Runnable task) {

executeThread= new Thread(newRunnable() {

@Overridepublic voidrun() {

Thread runner= new Thread(task);

runner.setDaemon(true);

runner.start();

}

});

executeThread.start();

}/*** 强制停止执行线程,最多等待mills时间,如果超过这个时间则会强制停止*/

public void shutDown(longmills) {//TODO

}

}

但是此时代码肯定是有问题的,因为:

1c89574ef15d7fecec6e82a421d6ee29.png

那如何修改代码能让我们的task执行完之后再让executeThread退出呢?其实很简单,join就派上用场啦:

13401efda9df10143e28a4f264f25278.png

然后再引进一个flag来判断是否任务执行完:

1c3e513a2bcd0b4725c2accc873b7712.png

假设有个任务要执行1个小时,那可能我们等不了这么长时间,于是乎接下来去实现shutDown()来指定多少时间强制性的终止我们的任务,如下:

a7ed46ddcaf77a17f8a463dcbfe39038.png

0840fd8021ed61c4b4413f768715542e.png

好了,接下来来调用一下:

9a236a57e0e4b3f21a6f02d0f587d7d2.png

编译运行:

d5ed861986e791c4e6a4caa8bbdf80b4.gif

那如果我们的任务时间比较短,比如说2秒中,虽然我们终断传的是5秒,那只要执行2秒的任务最终也要等5秒才退出么,下面试验下:

5d5a467ebd145e672f69b9caa9c39d8b.png

编译运行:

77ce91659a38e7d694c4ca74c455fb63.gif

当然不会啦~~所以完美的解决了我们的需求~~这个在实际项目中应该还是有这种类似的需求的~~

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值