java线程基础巩固---Thread API综合实战之编写ThreadService实现暴力结束线程
2017-12-09 21:24
561 查看
上篇中在最后抛出一个问题,具体问题可以查看此篇【http://www.cnblogs.com/webor2006/p/7995229.html】,这里不再概述,其实要实现这个需求可以用咱们之前学习的守护线程来解决,守护的场景跟我们想要的需求也很类似啦,下面看下如何来实现这样的目标:
首先新建一个类用来包装线程的执行与停止,如下:
然后再new一个线程:
然后到核心的关键啦,再executeThread时面再new一个守护线程来执行这个task,如下:
但是此时代码肯定是有问题的,因为:
那如何修改代码能让我们的task执行完之后再让executeThread退出呢?其实很简单,join就派上用场啦:
然后再引进一个flag来判断是否任务执行完:
假设有个任务要执行1个小时,那可能我们等不了这么长时间,于是乎接下来去实现shutDown()来指定多少时间强制性的终止我们的任务,如下:
好了,接下来来调用一下:
编译运行:
那如果我们的任务时间比较短,比如说2秒中,虽然我们终断传的是5秒,那只要执行2秒的任务最终也要等5秒才退出么,下面试验下:
编译运行:
当然不会啦~~所以完美的解决了我们的需求~~这个在实际项目中应该还是有这种类似的需求的~~
首先新建一个类用来包装线程的执行与停止,如下:
public class ThreadService { /** * 执行一个线程 **/ public void execute(Runnable task) { //TODO } /** * 强制停止执行线程,最多等待mills时间,如果超过这个时间则会强制停止 **/ public void shutDown(long mills) { //TODO } }
然后再new一个线程:
public class ThreadService { private Thread executeThread; /** * 执行一个线程 */ public void execute(Runnable task) { executeThread = new Thread(new Runnable() { @Override public void run() { } }); executeThread.start(); } /** * 强制停止执行线程,最多等待mills时间,如果超过这个时间则会强制停止 */ public void shutDown(long mills) { //TODO } }
然后到核心的关键啦,再executeThread时面再new一个守护线程来执行这个task,如下:
public class ThreadService { private Thread executeThread; /** * 执行一个线程 */ public void execute(Runnable task) { executeThread = new Thread(new Runnable() { @Override public void run() { Thread runner = new Thread(task); runner.setDaemon(true); runner.start(); } }); executeThread.start(); } /** * 强制停止执行线程,最多等待mills时间,如果超过这个时间则会强制停止 */ public void shutDown(long mills) { //TODO } }
但是此时代码肯定是有问题的,因为:
那如何修改代码能让我们的task执行完之后再让executeThread退出呢?其实很简单,join就派上用场啦:
然后再引进一个flag来判断是否任务执行完:
假设有个任务要执行1个小时,那可能我们等不了这么长时间,于是乎接下来去实现shutDown()来指定多少时间强制性的终止我们的任务,如下:
好了,接下来来调用一下:
编译运行:
那如果我们的任务时间比较短,比如说2秒中,虽然我们终断传的是5秒,那只要执行2秒的任务最终也要等5秒才退出么,下面试验下:
编译运行:
当然不会啦~~所以完美的解决了我们的需求~~这个在实际项目中应该还是有这种类似的需求的~~
相关文章推荐
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
- 【Java基础_(线程篇_第一篇)】继承Thread;实现runnable;sleep、wait用法和区别;Thread和Runnable区别;线程停止
- java基础知识回顾之java Thread类--java线程实现常见的两种方式(一)
- 【Java基础学习笔记】Thread+JLabel实现线程
- java线程基础巩固---构造Thread对象你也许不知道的几件事
- java线程基础巩固---策略模式在Thread和Runnable中的应用分析
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- 第67课:Spark SQL下采用Java和Scala实现Join的案例综合实战(巩固前面学习的Spark SQL知识)
- 【Java基础】线程笔记——ThreadApi
- JAVA与多线程开发(线程基础、继承Thread类来定义自己的线程、实现Runnable接口来解决单继承局限性、控制多线程程并发)
- java线程基础巩固---多线程与JVM内存结构的关系及Thread构造函数StackSize的理解
- java基础知识回顾之java Thread类--java线程实现常见的两种方式实现Runnable接口(二)
- java线程:用thread与runnable实现的区别
- 在java编程时,线程创建实现Runnable接口与继承Thread类的不同
- (转)实战Memcached缓存系统(2)Memcached Java API基础之MemcachedClient
- java基础--线程03--实现线程范围内的共享变量
- Java基础巩固之线程的同步synchronized
- Java基础之线程——派生自Thread类的子类(TryThread)
- java线程:用thread与runnable实现的区别