Last active
August 29, 2015 14:09
-
-
Save seveniu/78b490b77452b8479496 to your computer and use it in GitHub Desktop.
java timer by day
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package com.dhlz.webService.util; | |
| import java.util.Calendar; | |
| import java.util.Date; | |
| import java.util.concurrent.*; | |
| /** | |
| * User: seveniu | |
| * Date: 11/12/14 | |
| * Time: 5:46 PM | |
| * Project: FireGetAll | |
| */ | |
| public class TimerManager { | |
| private ConcurrentHashMap<String, ScheduledExecutorService> timerMap = new ConcurrentHashMap<>(); | |
| private static TimerManager instance = new TimerManager(); | |
| private TimerManager() { | |
| } | |
| public static TimerManager get() { | |
| return instance; | |
| } | |
| /** | |
| * @param name 任务名 | |
| * @param timerTask 任务 | |
| * @param hour 小时 | |
| */ | |
| public void addDayTimerTask(final String name, final Runnable timerTask, int hour) { | |
| addTimerTask(name, timerTask, getFirstDelay(getFirstRunTime(hour, 0, 0)), 1, TimeUnit.DAYS); | |
| } | |
| /** | |
| * @param name 任务名 | |
| * @param timerTask 任务 | |
| * @param hour 小时 | |
| * @param minute 分钟 | |
| */ | |
| public void addDayTimerTask(final String name, final Runnable timerTask, int hour, int minute) { | |
| addTimerTask(name, timerTask, getFirstDelay(getFirstRunTime(hour, minute, 0)), 1, TimeUnit.DAYS); | |
| } | |
| /** | |
| * @param name 任务名 | |
| * @param timerTask 任务 | |
| * @param hour 小时 | |
| * @param minute 分钟 | |
| * @param second 秒 | |
| */ | |
| public void addDayTimerTask(final String name, final Runnable timerTask, int hour, int minute, int second) { | |
| addTimerTask(name, timerTask, getFirstDelay(getFirstRunTime(hour, minute, second)), 1, TimeUnit.DAYS); | |
| } | |
| /** | |
| * @param name 任务名 | |
| * @param timerTask 任务 | |
| * @param hour 小时 | |
| * @param minute 分钟 | |
| * @param second 秒 | |
| */ | |
| public void addTimerTask(final String name, final Runnable timerTask, int hour, int minute, int second, long period, TimeUnit timeUnit) { | |
| long firstDelay = getFirstDelay(getFirstRunTime(hour, minute, second)); | |
| System.out.println("firstDelay : " + firstDelay); | |
| addTimerTask(name, timerTask, firstDelay, period, timeUnit); | |
| } | |
| /** | |
| * 添加周期任务 | |
| * | |
| * @param name 任务名 | |
| * @param timerTask 任务 | |
| * @param period 周期 | |
| * @param timeUnit 周期的单位 | |
| */ | |
| public void addTimerTask(final String name, final Runnable timerTask, long firstDelay, long period, TimeUnit timeUnit) { | |
| if (timerTask == null) { | |
| throw new NullPointerException("timerTask is null"); | |
| } | |
| ScheduledExecutorService scheduled = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() { | |
| @Override | |
| public Thread newThread(Runnable r) { | |
| Thread thread = new Thread(r); | |
| thread.setName(name); | |
| return thread; | |
| } | |
| }); | |
| scheduled.scheduleWithFixedDelay(timerTask, | |
| firstDelay, | |
| period, | |
| timeUnit); | |
| timerMap.put(name, scheduled); | |
| } | |
| /** | |
| * 获取第一次执行的时间 | |
| * | |
| * @param hour 小时 | |
| * @param minute 分钟 | |
| * @param second 秒 | |
| * @return 第一次执行的时间 | |
| */ | |
| public Date getFirstRunTime(int hour, int minute, int second) { | |
| Calendar calendar = Calendar.getInstance(); | |
| calendar.set(Calendar.HOUR_OF_DAY, hour); | |
| calendar.set(Calendar.MINUTE, minute); | |
| calendar.set(Calendar.SECOND, second); | |
| Date date = calendar.getTime(); | |
| if (date.before(new Date())) { | |
| calendar.add(Calendar.DAY_OF_YEAR, 1); | |
| date = calendar.getTime(); | |
| } | |
| return date; | |
| } | |
| private long getFirstDelay(Date date) { | |
| return (date.getTime() - System.currentTimeMillis()) / 1000; | |
| } | |
| public void stopTimer(String name) { | |
| timerMap.get(name).shutdown(); | |
| } | |
| public static void main(String[] args) { | |
| Runnable runnable = new Runnable() { | |
| @Override | |
| public void run() { | |
| System.out.println(new Date()); | |
| } | |
| }; | |
| // TimerManager.get().addTimerTask("test", runnable, 10, 2, TimeUnit.SECONDS); | |
| // TimerManager.get().addTimerTask("test", runnable, 19, 26, 0, 4, TimeUnit.SECONDS); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment