• [置顶] java动态控制线程的启动和停止


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


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


    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

  • 相关阅读:
    【HDOJ】4347 The Closest M Points
    【HDOJ】4341 Gold miner
    【HDOJ】4333 Revolving Digits
    【HDOJ】4336 Card Collector
    【HDOJ】4328 Cut the cake
    【HDOJ】4322 Candy
    【HDOJ】4317 Unfair Nim
    串口接收线程退出与优先级问题
    EVC编程与调试过程出现的问题
    Windows CE创建桌面快捷方式
  • 原文地址:https://www.cnblogs.com/iamconan/p/7383518.html
Copyright © 2020-2023  润新知