Java结束定时器任务

12 篇文章 0 订阅
3 篇文章 0 订阅

有的定时器任务是随系统的开启而保持常开的,有的定时器任务就是任务处理完毕就需要回收以释放系统资源,那么如何结束定时器任务?

定时器任务是不能采用for循环或者while循环来结束的,采用私有变量也不合适,因此搜到了这种方法:

可以封装一个FlagBean类用来控制,在定时器构造函数中传入这个FlagBean的实例,在定时器内部进行其他控制,总而言之就是在外部进行控制,参见下面的代码

定时器控制类:

package com.feng.control;

/**
 * 定时器控制类
 */
public class ControlFlag {
	
	private int count;
	
	private boolean flag;

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	public boolean isFlag() {
		return flag;
	}

	public void setFlag(boolean flag) {
		this.flag = flag;
	}
}

下面的方法用来模拟定时器任务

package com.feng.operator;

import com.feng.control.ControlFlag;

/**
 * 模拟定时器任务
 */
public class Operator {

	private ControlFlag control;

	public Operator(ControlFlag controlFlag) {
		this.control = controlFlag;
	}
	
	public void testOperator(int i){
		System.out.println("输出了: " + i );
		this.control.setCount(this.control.getCount() + 1) ; 
	}
	
	public ControlFlag getControl() {
		return control;
	}

	public void setControl(ControlFlag control) {
		this.control = control;
	}
}

测试类

package com.feng.test;

import com.feng.control.ControlFlag;
import com.feng.operator.Operator;

public class TestOutSideControl {
	
	public static void main(String[] args) {
		ControlFlag controlFlag = new ControlFlag();
		controlFlag.setFlag(true);
		controlFlag.setCount(0);
		
		Operator op = new Operator(controlFlag);
		
		while (controlFlag.isFlag()) {
			if (controlFlag.getCount() > 20) {
				controlFlag.setFlag(false);
				continue;
			}
			op.testOperator(20);
		}
	}

}

这种结束定时器任务的方法个人认为是比较好的,希望大家提出不足之处,O(∩_∩)O谢谢

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java定时器(timer)是一种能够在特定时间间隔或者特定时间点执行某些任务的工具。它可以帮助我们实现很多有用的定时任务,如定时备份数据、定时发送邮件、定时清理缓存等等。 Java中的定时器主要有两种实现方式:一种是使用Timer类,另一种是使用ScheduledExecutorService接口。在本文中,我们主要介绍使用Timer类的实现方式。 使用Timer类创建定时器的步骤如下: 1. 创建一个Timer对象 ```java Timer timer = new Timer(); ``` 2. 创建一个TimerTask对象,用于执行定时任务 ```java TimerTask task = new TimerTask() { @Override public void run() { // 定时任务的具体实现 } }; ``` 3. 调用Timer对象的schedule()方法,设置定时任务的执行时间和执行频率 ```java timer.schedule(task, delay, period); ``` 其中,delay表示任务的延迟时间,单位为毫秒;period表示任务的执行周期,单位也为毫秒。如果period为0,则表示只执行一次任务。 完整的示例代码如下: ```java import java.util.Timer; import java.util.TimerTask; public class MyTimerTask extends TimerTask { @Override public void run() { System.out.println("定时任务执行了"); } public static void main(String[] args) { Timer timer = new Timer(); MyTimerTask task = new MyTimerTask(); timer.schedule(task, 1000, 2000); } } ``` 在上面的示例代码中,我们创建了一个MyTimerTask类,继承了TimerTask类,并实现了run()方法。在main()方法中,我们创建了一个Timer对象和一个MyTimerTask对象,并调用了schedule()方法,设置了任务的延迟时间为1000毫秒,执行周期为2000毫秒。当程序执行到schedule()方法时,定时器会在1000毫秒后开始执行定时任务,并且每隔2000毫秒执行一次。 需要注意的是,当定时任务执行时间超过执行周期时,定时器会等待当前任务执行完毕后立即执行下一次任务,而不是等待执行周期结束再执行。如果我们想要避免这种情况,可以考虑使用ScheduledExecutorService接口来实现定时任务
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值