有的定时器任务是随系统的开启而保持常开的,有的定时器任务就是任务处理完毕就需要回收以释放系统资源,那么如何结束定时器任务?
定时器任务是不能采用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谢谢