最近项目有这样的需求:原来系统有个计算的功能,但该功能执行时间会很长(大概需要几个小时才能完成),如果执行过程中出现了错误的话,也只能默默的等待错误执行完成才行,无法做到动态的对该功能进行停止。



我了解到项目需求后,写了如下的小例子:

package com.iamzken.test;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class Test extends HttpServlet {
//该线程代表执行任务的线程
private volatile Thread t ; @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
} @Override
protected void doPost(final HttpServletRequest req, final HttpServletResponse resp)
throws ServletException, IOException { //开关参数switch,值为on代表要启动线程t执行相应的任务,值为off代表要停止正在执行任务的线程t
String s = req.getParameter("switch");
if("off".equals(s)){
t.stop();
}else if("on".equals(s)){
t = new Thread(new Runnable() { //run的方法体代表要执行的任务
@Override
public void run() {
req.setAttribute("name", req.getParameter("flag"));
int i = 0;
while(i < 10000000){
System.out.println(++i);
} }
});
//启动线程
t.start();
}
try {
//代表线程t执行完之后主线程才能继续
t.join();
System.out.println(req);
req.getRequestDispatcher("/my001.jsp").forward(req, resp);
} catch (Exception e) {
e.printStackTrace();
}
}
}



以上是主要的servlet代码:

访问路径为:http://localhost:8080/web001/test.do?flag=xxyyzz&switch=off

其中switch开关参数取值有两种:on和off,on表示执行线程对应的任务,off表示中断线程正在执行的任务。



最后附上完整的项目源码。

web001.rar

[置顶] java动态控制线程的启动和停止的更多相关文章

  1. Java线程的启动和停止(一)

    如何构造线程 在运行线程之前需要先构造线程对象,线程对象的构造需要指定线程所需要的属性,比如:所属线程组.线程优先级.是否为Daemon线程等信息.下面我们看一下,java.lang.Thread中对 ...

  2. JAVA中线程池启动定时任务

    /** * 用线程池启动定时器 * @param args */ public static void main(String[] args) { //10秒启动 Executors.newSched ...

  3. [置顶] Java启动命令大观

    Java启动命令是所有java应用程序的入口,通过它来启动Java运行时环境,并加载相关的class.不过由于IDE的盛行,我们Java程序员中的大多数的并不是非常的了解Java启动命令.本文希望做一 ...

  4. [置顶] Java套接字Socket编程

    1)概念 网络编程基本模型就客户端到服务器的模型,也就是我们常见的C/S模型.简单的说就是两个进程间相互通信的过程.即通信双方一方作为服务器等待客户端提出请求并给以回应,另一方作为客户端向服务器提出请 ...

  5. [置顶] Java 8全面解析!不知道的来看看那!

    java8的面世惊动了不少业界人员,让我们一起来看看吧! 函数式接口 函数式接口是只定义了一个抽象方法的接口.Java 8引入了FunctionalInterface注解来表明一个接口打算成为一个函数 ...

  6. [置顶] Java Web开发教程来袭

    Java Web,是用Java技术来解决相关web互联网领域的技术总和.web包括:web服务器和web客户端两部分.Java在客户端的应用有java applet不过现在使用的很少,Java在服务器 ...

  7. [置顶] java web 动态服务器

    写了一个java web 动态服务器,主要通过内部类来实现,动态类使用了外部类,采用了 classforname 实例化,动态类的构造方法不能带参数, 效果都出来了,分享给有需要的 朋友.判断做的不够 ...

  8. [置顶] Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建

    这次换了台电脑,所以需要重新配置一次项目开发环境,过程中的种种,记录下来,便于以后再次安装,同时给大家一个参考. 1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64 ...

  9. [置顶] Java Web学习总结(24)——SSM(Spring+SpringMVC+MyBatis)框架快速整合入门教程

    1.基本概念 1.1.Spring Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One  ...

  10. [置顶] 问题解决——XP线程池找不到QueueUserWorkItem

    2013年7月11号 主管让同事写一个并发100的小工具进行什么压力测试,据说是创建100个线程. 我表示这真真的是在坑人! 线程创建消耗资源,以自己的笔记本来跑这个东西,时间片都消耗在了线程切换上了 ...

随机推荐

  1. USACO 2022 Cu 题解

    USACO 2022 Cu 题解 AK用时:$ 3 $ 小时 $ 30 $ 分钟. A - Cow College 原题 Farmer John 计划为奶牛们新开办一所大学! 有 $ N $($ 1 ...

  2. 单片机 IAP 功能基础开发篇之APP升级(二)

    1.前言 上一篇单片机 IAP 功能基础开发篇之APP升级(一)讲到了单片机 IAP 功能给 APP 程序升级的设计思路,这篇介绍的是具体实现方式. 下一篇单片机 IAP 功能基础开发篇之APP升级( ...

  3. MySQL的四种分区方式

    1. 什么是表分区? mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放 ...

  4. 【Unity3D】选中物体消融特效

    1 消融特效原理 ​ 消融特效 中基于 Shader Graph 实现了消融特效,本文将基于 Shader 实现消融特效. ​ 当前实现消融特效的方法主要有 Alpha 测试消融.clip(或 dis ...

  5. Spring Boot图书管理系统项目实战-4.基础信息管理

    导航: pre:  3.用户登录 next:5.读者管理 只挑重点的讲,具体的请看项目源码. 1.项目源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.页面设计 出版社管理.语种管理.书架管 ...

  6. Oracle驱动错误:oracle.jdbc.driver.T4CConnection.isValid(I)Z

    1.问题说明 今天在sping boot中配置多数据源,用到了oracle和postgresql两种数据库. oracle驱动版本是ojdbc14,启动以后调试程序直接报错了,就是本文题目中的错. 查 ...

  7. webservice之jax-ws实现方式(服务端)

    1.什么是webservice? webservice是一种远程资源调用技术,它的实现方式主要分为两种, 第一种是jaxws方式,它是面向方法的,它的数据类型是xml是基于soap实现传输: 第二种是 ...

  8. Linux驱动开发笔记(一):helloworld驱动源码编写、makefile编写以及驱动编译基本流程

    前言   基于linux的驱动开发学习笔记,本篇是描述了一个字符驱动的基础开发流程,以便做嵌入式开发多年的应用或者系统学习驱动开发.   笔者自身情况   笔者拥有硬件基础,单片机软硬基础,linux ...

  9. 公司服务器建站笔记(三):腾讯云服务器CentOS8.2安装界面环境,使用vnc远程登陆并搭建轻量级Qt服务器

    前言   有些小项目可能只有几个点,几十个点,几百个点,这个时候使用qt的tcp服务器或者mqtt或者websocket等相关服务就可以满足,腾讯云CentOs8.2服务器安装的是没有界面的版本,本篇 ...

  10. Django关于StreamingHttpResponse与FileResponse响应文件或视频的下载请求

    StreamingHttpResponse from django.http import StreamingHttpResponse StreamingHttpResponse(streaming_ ...