0 0

怎样停止这样的计时器5

web.xml 配置了一个监听器

 

	<listener>
		<listener-class>com.czk.util.Listener</listener-class>
	</listener>

 Listener.java

 

package com.czk.util;

import java.util.Timer;
import java.util.TimerTask;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.czk.main.test3;

public class Listener implements ServletContextListener {

	private Timer timer = test3.getTimer(); //获取静态的Timer对象

	public void contextDestroyed(ServletContextEvent e) {

		timer.cancel();
	}

	public void contextInitialized(ServletContextEvent e) {

		timer.schedule(Inspection(), 0, 500);
	}

	/**
	 * 执行巡检
	 * 
	 * @return
	 */
	private TimerTask Inspection() {

		TimerTask tt = new TimerTask() {

			@Override
			public void run() {
				for (int i = 0; i < 100; i++) {
					try {
						System.out.println(i);
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
			}
		};
		return tt;
	}
}

 test3.java  //静态的Timer对象

 

package com.czk.main;

import java.util.Timer;
public class test3 {

	public static Timer timer = null;

	static {
		timer = new Timer("czk");
	}

	public static Timer getTimer() {
		if (timer != null) {
			return timer;
		} else {
			return null;
		}
	}

	public static void setSleep() throws Exception {
		if (timer != null) {
			timer.cancel();
		}
	}
}

 

tomcat 启动后,这个循环打印1-100 就开始执行了。

这个时候我想让它停下来。

 

public class test {

	public static void main(String[] args) throws Exception {
		
		Timer timer1 = test3.getTimer();
		Timer timer2 = test3.getTimer();
		Timer timer3 = test3.getTimer();
		System.out.println(timer1.equals(timer2));
		System.out.println(timer1.equals(timer3));
		timer1.cancel();
	}
}

 

通过这样的途径停止不了。

请教高手怎么办才好。

 

大致的情况就是:服务器启动后,后台定时执行一个方法,这个方法可以通过前台的Action请求进行停止或重启。

2012年11月21日 09:05

2个答案 按时间排序 按投票排序

0 0

目测应该拿到timer.schedule(Inspection(), 0, 500);   看看这个返回值是什么类型,获取这个方法的返回值对象,然后看看这个对象是不是有cancel方法,调用一下试试

2012年11月23日 17:25
0 0



 TimerTask tt = new TimerTask() {  
  
            @Override  
            public void run() {  
                for (int i = 0; i < 100; i++) {  
                    try {  
                        System.out.println(i);  
                        Thread.sleep(1000);  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  

        };  

这个类最好别写成内部类不然不好操作。
直接写一个自己的实现。在for循环里面加上个停止判断。
  Class  MyTimerTask() extends TimerTask{  
           boolean stop=false;
            @Override  
            public void run() {  
                for (int i = 0; i < 100&&(!stop); i++) {  
                    try {  
                        System.out.println(i);  
                        Thread.sleep(1000);  
                    } catch (InterruptedException e) {  
                        e.printStackTrace();  
                    }  
                }  
            }  
           public void stop(){
           this.stop=true;
}
        };  

2012年11月21日 09:26

相关推荐

    辩论赛计时器

    在教育系统应用中,这样的计时器能够有效地提升比赛的规范性和公正性。 Delphi源码是程序的核心部分,它包含了所有控制计时器行为的指令和逻辑。对于开发者来说,源码的可读性和可维护性至关重要,因为这允许他们...

    labview实现计时器

    本篇文章将深入探讨如何在LabVIEW中实现计时器,并涉及计时器的复位功能。 首先,我们来看LabVIEW中的基本计时器类型。有两种主要的计时器:定时器(Timer)和延时器(Delay)。定时器在达到预设时间后触发一个事件...

    c++下MFC的计时器

    当时间到达0时,停止计时器并发出通知。 4. **暂停和恢复计时器**: MFC提供了`KillTimer`和`SetTimer`函数来暂停和恢复计时器。当你想要暂停计时器时,调用`KillTimer`并传入计时器ID: ```cpp KillTimer(ID_MY_...

    flash简单计时器

    如果需要停止计时器,可以调用`stop()`方法: ```actionscript timer.stop(); ``` 为了实现一个简单的计时器显示,我们可以创建一个动态文本字段(`TextField`)来显示当前时间。首先,创建文本字段并将其放置在...

    组态王计时器控件及使用文档

    在工业自动化领域,计时器是不可或缺的一部分,它能够帮助工程师精确地控制设备运行的时间,从而实现定时启动、定时停止、周期性执行任务等功能。本文将详细介绍组态王计时器控件的特性、使用方法以及示例工程,帮助...

    组态王秒计时器编程方法

    停止事件中,停止计时器的计数。 3. 更新显示组件:在计时器的周期性事件中,更新数字显示组件的值,使其与计时器变量同步。 4. 控制计时器:可以设计按钮或开关来控制计时器的启停,通过脚本实现按钮点击事件,调用...

    电话通话计时器PCB

    电话通话计时器PCB是一种专门用于记录电话通话时间的硬件设计,主要应用于需要精确计费或...随着现代通信技术的发展,虽然电话通话计费已不再那么依赖硬件计时器,但这样的设计仍能作为学习电子技术的一个经典实例。

    数字计时器(eda)

    【数字计时器(EDA)】是电子设计自动化(EDA)领域的一个常见实践项目,它主要涉及硬件描述语言VHDL...在实际工程中,这样的计时器设计可以应用于各种嵌入式系统、实时操作系统或者作为其他复杂系统中的时间基准模块。

    简易的计时器

    input("按回车键停止计时器...") timer.stop() ``` 在这个例子中,我们创建了一个`CountdownTimer`类,它包含一个`run`方法来执行倒计时。这个方法在一个循环中运行,直到接收到停止信号(通过`event`对象)。主...

    计时器倒计时器裁判员专用

    【计时器与倒计时器技术解析】 在软件开发领域,计时器和倒计时器是常见的功能模块,广泛应用于各种应用中,如体育赛事、考试计时、健身训练等。计时器用于记录从某个时间点开始流逝的时间,而倒计时器则从设定的...

    C#有进度条的计时器(倒计时器)

    再次点击则会停止计时器并重置进度条。 在资源的`Countdown`文件中,可能包含了以下内容: 1. `Form1.cs`:包含窗体的定义和计时器、按钮的事件处理函数。 2. `Form1.Designer.cs`:自动生成的代码,用于初始化窗体...

    计时器源码.zip

    // 停止计时器 // 可能需要更新UI,表示计时器已暂停 } ``` 6. **重新启动计时器**:如果需要继续计时,可以再次调用 SetTimer 来重启计时器。 ```cpp void CMyDialog::OnBnClickedResumeButton() { SetTimer(m...

    C#简单的计时器

    使用 `Start()` 方法启动计时器,`Stop()` 方法停止计时器: ```csharp timer.Start(); // 启动计时器 timer.Stop(); // 停止计时器 ``` **倒计时计时器实现** 对于倒计时计时器,我们需要在`Timer_Tick`事件处理...

    MFC编写的计时器

    // 停止计时器 SetTimer(m_nTimerID, 1000, NULL); // 重新启动计时器 } CDialogEx::OnTimer(nIDEvent); } ``` 在这个例子中,`m_nTimerID`是计时器的唯一标识符,`1000`是计时器的间隔(以毫秒为单位),`...

    反应计时器设计+毫秒计时器+延时计数器模块(Verilog)

    (5)如果不按下 stop 键,计时器达到 999 之后停止计数。 (6)如果 LED 指示灯点亮前,按下 stop 键,被视为犯规,数码管上应给出犯规指示。 2. 提高部分 (1) 按下 start 键后,随机间隔一段时间(1~6s)之后,...

    javascript实现计时器

    为了停止计时器,我们可以使用`clearInterval`函数,传入之前`setInterval`返回的ID: ```javascript clearInterval(timerId); // 停止计时器 ``` 这样的计时器特别适用于个人网站,比如用来纪念重要日期。你可以...

    计时器(秒表、倒计时)

    在IT领域,计时器和倒计时是两种常见的时间管理工具,广泛应用于各种软件、网页和移动应用中。在给定的标题“计时器(秒表、倒计时)”中,我们可以理解这是一个集成了秒表和倒计时功能的程序。描述中提到它是“单...

    eda实验计时器_EDA_vhdl_EDA实验计时器_

    3. **控制逻辑**:这部分代码管理计时器的启动、停止、复位等功能,确保其按预期工作。 4. **输出**:当计时器达到预设值时,会触发一个或多个输出信号,表示时间已到。 **Quartus II平台** Quartus II是Altera公司...

    模仿小米计时器

    当用户需要暂时停止计时,比如接听电话或进行其他操作时,计时器应提供暂停功能。在程序中,这可能意味着清除已设置的定时器,并保存当前的时间状态,以便之后恢复。 4. **重置计时器**: 重置功能允许用户回到...

    Android Studio 写的时分秒计时器

    本项目是一个简单的时分秒计时器应用,它包含"开始"和"停止"两个功能按钮,用户可以通过这些按钮来控制计时器的工作状态。 首先,我们需要了解Android Studio项目的结构。在这个项目的目录中,`gradlew.bat`是一个...

Global site tag (gtag.js) - Google Analytics