Java Timer TimerTask
java.util.TimerTask是一个实现Runnable接口的抽象类,我们需要扩展这个类来创建我们自己的TimerTask,可以使用Java Timer类来调度TimerTask。
Java Timer类是线程安全的,多个线程可以共享单个Timer对象,而无需外部同步。Timer类使用java.util.TaskQueue以给定的定期间隔添加任务,并且在任何时间只能有一个线程运行TimerTask.
Java Timer类使用Object等待和通知方法来调度任务.
import java.util.Date; import java.util.Timer; import java.util.TimerTask; public class MyTimerTask extends TimerTask { @Override public void run() { System.out.println("Timer task started at:" + new Date()); completeTask(); System.out.println("Timer task finished at:" + new Date()); } private void completeTask() { try { // assuming it takes 20 secs to complete the task Thread.sleep(20000); } catch ( InterruptedException e ) { e.printStackTrace(); } } public static void main(String args[]) { TimerTask timerTask = new MyTimerTask(); // running timer task as daemon thread Timer timer = new Timer(true); timer.scheduleAtFixedRate(timerTask, 0, 10 * 1000); System.out.println("TimerTask started"); // cancel after sometime try { Thread.sleep(120000); } catch ( InterruptedException e ) { e.printStackTrace(); } timer.cancel(); System.out.println("TimerTask cancelled"); try { Thread.sleep(30000); } catch ( InterruptedException e ) { e.printStackTrace(); } } }
结果:
TimerTask started Timer task started at:Thu Nov 24 12:35:03 CST 2016 Timer task finished at:Thu Nov 24 12:35:23 CST 2016 Timer task started at:Thu Nov 24 12:35:23 CST 2016 Timer task finished at:Thu Nov 24 12:35:43 CST 2016 Timer task started at:Thu Nov 24 12:35:43 CST 2016 Timer task finished at:Thu Nov 24 12:36:03 CST 2016 Timer task started at:Thu Nov 24 12:36:03 CST 2016 Timer task finished at:Thu Nov 24 12:36:23 CST 2016 Timer task started at:Thu Nov 24 12:36:23 CST 2016 Timer task finished at:Thu Nov 24 12:36:43 CST 2016 Timer task started at:Thu Nov 24 12:36:43 CST 2016 TimerTask cancelled Timer task finished at:Thu Nov 24 12:37:03 CST 2016
浙公网安备 33010602011771号