java线程基础巩固---Thread API综合实战之编写ThreadService实现暴力结束线程
上篇中在最后抛出一个问题,具体问题可以查看此篇【http://www.cnblogs.com/webor2006/p/7995229.html】,这里不再概述,其实要实现这个需求可以用咱们之前学习的守护线程来解决,守护的场景跟我们想要的需求也很类似啦,下面看下如何来实现这样的目标:
首先新建一个类用来包装线程的执行与停止,如下:
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 API综合实战之编写ThreadService实现暴力结束线程的更多相关文章
- java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期
Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这 ...
- Qt 线程基础(Thread Basics的翻译,线程的五种使用情况)
Qt 线程基础(QThread.QtConcurrent等) 转载自:http://blog.csdn.net/dbzhang800/article/details/6554104 昨晚看Qt的Man ...
- 第二十四节:Java语言基础-讲解数组的综合应用
数组的综合应用 // 打印数组 public static void printArray(int[] arr) { for(int x=0;x<arr.length;x++) { if(x!= ...
- java线程基础巩固---ThreadGroup API学习
ThreadGroup初识: 这次来学习一个新的线程概念---线程组(ThreadGroup),首先从JDK文档中对它进行一个大致的了解,如下: 下面开始用代码来进行说明,对于一个线程来说如果没有指定 ...
- Java自学基础、进阶、项目实战网站推荐
推荐一个自学的好平台,有Java基础,前端,后端,基础的内容都有讲解,还有框架的讲解和实战项目,特别适合自学 JAVA 自学网站 JAVA 练习题 Spring 教程 Mybatis 教程 Sprin ...
- java多线程-------------基础的Thread.CURRNET
总结:感觉不是太难,不过我写出来了,但竟然不理解它的意思?多线程就是多个任务同时进行 public class Test2 { public static void main(String[] arg ...
- java核心技术-多线程之线程基础
说起线程,无法免俗首先要弄清楚的三个概念就是:进程.线程.协程.OK,那什么是进程,什么是线程,哪协程又是啥东西.进程:进程可以简单的理解为运行在操作系统中的程序,程序时静态代码,进程是动态运行着的代 ...
- JAVA线程基础概念及使用
一.线程和进程的区别 在操作系统中所有运行的任务通常对应一个进程,进程是系统进行资源分配和调度的一个独立单位.线程是进程的组成部分,一个进程最少包含一个线程.并发和并行的区别是,并发指的在同一时刻内, ...
- Qt 线程基础(QThread、QtConcurrent、QThreadPool等)
使用线程 基本上有种使用线程的场合: 通过利用处理器的多个核使处理速度更快. 为保持GUI线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线程. 何时使用其他技术替代线程 开发人员使 ...
随机推荐
- 【JavaScript】初识js
前端三大利器就是HTML+CSS+JavaScript,他们在整个前端开发中的主要作用大体可以概括如下 html 标记语言 负责页面的结构 css 层叠样式表 负责页面的样式 javascript 编 ...
- PJzhang:在windows10中实现右键命令行快捷打开
猫宁!!! (windows10---设置---轻松使用---键盘---开启PrtScn快速截图),或者winodws+shift+s kali linux中右键就可以打开终端命令行. 采用手工修改注 ...
- 求帮助 html5三次贝塞尔曲线问题
<!DOCTYPE html><html><head><meta charset="utf-8"> <title>can ...
- APP安全_Android渗透环境
Android渗透 移动APP大多通过WEB API服务的方式与服务端进行交互,这种模式把移动安全和web安全绑在一起.常见的web漏洞在移动APP中也存在,比如SQL注入,文件上传,中间件/serv ...
- Servlet 使Session设置失效
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletExcep ...
- 数据结构之单链表(golang版)
线性表之单链表 package main //线性表中的链式存储结构 //第一个节点为头节点,并不真实保存数据,头节点基本代表了整个链表 import ( "fmt" ) type ...
- .NET 表达式计算:Expression Evaluator
Expression Evaluator 是一个轻量级的可以在运行时解析C#表达式的开源免费组件.表达式求值应该在很多地方使用,例如一些工资或者成本核算系统,就需要在后台动态配置计算表达式,从而进行计 ...
- 状压DP--Rotate Columns (hard version)-- Codeforces Round #584 - Dasha Code Championship - Elimination Round (rated, open for everyone, Div. 1 + Div. 2)
题意:https://codeforc.es/problemset/problem/1209/E2 给你一个n(1-12)行m(1-2000)列的矩阵,每一列都可以上下循环移动(类似密码锁). 问你移 ...
- PyQt5创建多线程
参阅: https://blog.csdn.net/chengmo123/article/details/96477103 https://www.cnblogs.com/zhuminghui/p/9 ...
- .Net面试题三
1..Net中类和结构的区别? 2.死锁地必要条件?怎么克服? 3.接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类? 4.构造器COnstructor是否可以被继承?是否可以被 ...