通过Executors创建定时任务
相对时间的计算:
long period = new Date("2014-10-1").getTime - System.getCurrentTimeMills
package thread; import java.util.Date; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * 创建定时任务 * */ public class Concurrent_Schedule { public static void main(String[] args) { ScheduledExecutorService schedualedExecutor = Executors.newScheduledThreadPool(2); //延迟多长时间后自动执行任务,只执行1次 schedualedExecutor.schedule(new Runnable() { public void run() { System.out.println(Thread.currentThread().getName() + ", 3秒后执行定时任务!" + new Date()); } }, 3, TimeUnit.SECONDS); //延迟多长时间后自动执行任务,接着每隔多长时间调度1次,调度工作会一直进行 schedualedExecutor.scheduleAtFixedRate(new Runnable() { public void run() { System.out.println(Thread.currentThread().getName() + ", 1秒后执行定时任务,接着每隔2秒执行1次!" + new Date()); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } }, 1, 2, TimeUnit.SECONDS); //延迟多长时间后自动执行任务,待该线程执行任务结束后,在隔多长时间调度1次,调度工作会一直进行 schedualedExecutor.scheduleWithFixedDelay(new Runnable() { public void run() { System.out.println(Thread.currentThread().getName() + ", 1秒后执行定时任务,当前一个任务执行完成后,再每隔2秒执行1次!" + new Date()); try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } }, 1, 2, TimeUnit.SECONDS); //when server shutdown //schedualedExecutor.shutdown(); } }