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谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值