`
solejava
  • 浏览: 5101 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

java线程启动暂停停止的简单示例

阅读更多
  今天为测试之前写的socket处理程序,就动手写了个测试页面,用于控制线程运行,暂停和停止,不多说了,上代码先。
import java.io.IOException;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

/**
 * Servlet implementation class PressureServletTest
 */
public class PressureServletTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
   
	private int threadNumber = 10;
	private volatile int timeInterval = 25;
	private volatile boolean run = false;
	private volatile boolean cancelled = false;
	private ThreadGroup group = new ThreadGroup("压力测试线程组");
   
    public PressureServletTest() {
        super();
        
        int i = 0; 
        while(i < threadNumber){
        	new TestThread(group, "压力测试线程_" + i++).start();
        }
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String interval = request.getParameter("interval");
		String command = request.getParameter("command");
		if(request.getParameter("cancelled") != null){
			cancelled = true;
			group.interrupt();
		}else{
			if(interval != null){
				timeInterval = Integer.parseInt(interval);
			}
			
			if("S".equals(command)){
				if(run){
					run = false;
					group.interrupt();
				}
			}else if("R".equals(command)){
				if(!run){
					run = true;
					group.interrupt();
				}
			}
		}
		request.setAttribute("status", cancelled ? "停止" : run ? "运行" : "暂停");
		request.setAttribute("num", threadNumber);
		request.getRequestDispatcher("/admin_artifact_Pressuretest.jsp").forward(request, response);
	}
	
	private class TestThread extends Thread{
		
		private Logger log = Logger.getLogger(TestThread.class);
		
		private String login_detect_issuer = UssdConfigure.getInstance().getProperty(ConfigureField.LOGIN_ISSUER);
		
		private int maxWaitTime = UssdConfigure.getInstance().getIntProperty(ConfigureField.INT_MAX_FUTURE_TIMEOUT);

		@Override
		public void interrupt() {
			super.interrupt();
		}
		
		

		public TestThread(ThreadGroup group, String name) {
			super(group, name);
		}



		@Override
		public void run() {
			while(!cancelled){
				
				if(!run){
					try {
						synchronized (this) {
							this.wait();
						}
					} catch (InterruptedException e) {
						log.info("准备执行....");
					}
					continue;
				}
				
				//测试查询
				String id = RxMD5.getInstance().getString();//本次请求的查询Id
				String artifact = RxMD5.getInstance().getString();
				SoapSamlRequest samlrequest = new SoapSamlRequest(id, new Date(), login_detect_issuer);
				samlrequest.setArtifact(artifact);
				
				FutureData future = QueryIdentificationThread.getInstance().request(samlrequest);
				SoapSamlResponse userInfo = future.getResponse(maxWaitTime);
				
				if(userInfo == null){
					log.info("id:" + id +", 请求获取超时或出错!");
				}else{
					log.info("id:" + id +", 查询获取结果:" + userInfo.getStatusCode());
				}
				
				try {
					Thread.sleep(timeInterval);
				} catch (InterruptedException e) {
					log.info("请求发生暂停间隔中断....");
				}
				
				
			}
		}
		
	}

}


控制页面效果,这个没啥的,根据servlet的参数给几个按钮就行了。
  • 大小: 23.6 KB
分享到:
评论

相关推荐

    JAVA线程停止的方法

    本文将深入探讨Java线程停止的方法,特别是通过一个示例代码片段来解析如何利用标志变量(Flag)控制线程的生命周期,以及这种方法背后的原理与最佳实践。 ### Java线程停止方法概述 在Java中,直接调用线程的`...

    JAVA 线程中启动线程

    在Java编程语言中,线程是程序执行的基本单元,它允许程序并发地执行多个任务。在多线程环境中,程序的...在编写`test`这样的示例时,你可以创建并启动线程,测试各种线程控制和同步方法,从而加深对Java线程的理解。

    Java 线程通信示例 源代码

    这个"Java线程通信示例源代码"很可能包含了演示如何在不同线程之间共享数据和协调执行顺序的实例。线程通信主要涉及两个核心概念:同步和互斥。 1. **线程同步**:线程同步是为了防止多个线程同时访问共享资源,...

    简单的java线程demo

    本示例"简单的Java线程demo"旨在帮助初学者理解如何在Java中创建和管理线程。 在Java中,有两种主要的方式来创建线程:继承Thread类和实现Runnable接口。下面我们将详细讨论这两个方法。 1. 继承Thread类: 当一个...

    Java多线程机制(示例)

    下面是一段简单的示例代码,展示了如何使用Java创建两个不同的线程,并让它们同时运行: ```java // ThreadTest1.java public class ThreadTest1 { public ThreadTest1() { FirstThread first = new FirstThread...

    Java多线程管理示例

    Java多线程是Java编程中的一个关键特性,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程可以通过实现Runnable接口或继承Thread类来创建。下面我们将深入探讨Java多线程的核心概念、...

    JAVA线程学习(源代码)

    Java提供了多种方法来控制线程状态,如`start()`启动线程,`sleep()`使线程暂停,`join()`等待线程完成,以及`interrupt()`中断线程。 并发控制是线程编程中的重要部分。Java提供了synchronized关键字来实现互斥...

    java线程实例 各种小Demo

    Java线程是多任务编程的重要概念,它允许程序同时执行多个独立的任务,从而...在"线程池.rar"和"线程实例"这两个文件中,你可以找到关于这些概念的具体示例代码,通过学习和实践,可以深入理解Java线程的运用和管理。

    关于线程的动态停止,一个很经典的多线程麦票程序

    本示例“线程的动态停止:一个很经典的多线程麦票程序”探讨了如何在运行时控制线程的执行和停止,这对于理解和优化多线程应用程序至关重要。 1. **线程的基本概念**: - 线程是操作系统分配CPU时间的基本单位,每...

    Java线程培训资料

    ### Java线程培训资料知识点详解 #### 一、Java线程基本概念 1. **如何编写与启动线程** - **方式一:继承Thread类** ```java class MyThread extends Thread { @Override public void run() { // 业务逻辑 ...

    Java线程学习和总结

    在Java编程语言中,线程是程序执行的基本单元,它允许程序并发地...同时,"Java线程学习和总结.files"目录下的文件可能是与文章相关的辅助资料,例如代码示例或图片。建议结合这些资料一起学习,以获得更全面的知识。

    JAVA线程深入了解

    #### 一、JAVA线程启动方式详解 ##### 1. 利用`Thread`类的子类启动线程 在Java中,可以通过继承`Thread`类来创建一个新的线程。这种方式相对直观,易于理解。具体做法是创建一个`Thread`类的子类,并重写其`run`...

    java线程-保护性暂停(wait,notify实现).docx

    Java 线程保护性暂停(wait,notify 实现) ...本文详细讲解了 Java 线程中的保护性暂停机制,即 wait 和 notify 方法的实现,并提供了一个实际的示例代码,演示如何使用保护性暂停机制来实现线程之间的通信。

    java中线程的简单处理

    `Thread.sleep(long milliseconds)`可以使线程暂停指定的毫秒数。`Thread.join()`方法使调用线程等待目标线程完成其执行。 在多线程环境中,异常处理也非常重要。如果一个线程在`run`方法中抛出未捕获的异常,该...

    java一个多线程的经典例子

    在示例中,主程序使用`Thread.sleep()`方法让当前线程暂停执行指定时间,以便让其他线程有机会执行。 ```java try { Thread.sleep(7000); // 当前线程休眠7秒 } catch (InterruptedException e) { return; } ``` ...

    老师给我们的线程小示例

    在IT行业中,线程是程序执行的一个基本...通过这个压缩包,初学者不仅可以理解线程的基本概念,还能看到实际的代码示例,这对理解和掌握Java线程编程非常有帮助。记得在实践中不断尝试和调试,以加深对线程机制的理解。

    java多线程编程实例

    - `sleep(long millis)`方法使当前正在执行的线程暂停执行指定的毫秒数,之后线程将进入可运行状态等待被调度。 - `join()`方法用于等待一个线程的结束,只有当该线程执行完毕后,当前线程才能继续执行。 - `yield()...

    java常用的代码——线程

    这段代码展示了如何让一个线程暂停执行一段时间。具体来说: - `System.out.println("线程开始运行");` 打印一条消息,表明线程开始运行。 - `Thread.sleep(10000);` 让当前线程暂停10秒钟。注意这里的参数是以毫秒...

    java线程编程(概念+实例)

    Java线程编程是Java编程语言中的重要特性,它允许程序同时执行多个任务,从而提高了程序的效率和响应性。在Java中,多线程是通过内置的机制支持的,一个程序可以包含多个并发运行的部分,这些部分被称为线程。线程...

Global site tag (gtag.js) - Google Analytics