Java 怎么在规定时间段内循环执行一个任务,超出该时间段自动终止?

王世春 2016-12-24 05:30:42
如题:Java 怎么在规定时间段内循环执行一个任务,超出该时间段自动终止?

例如:想在每天的10:00到12:30之间不停的同步数据,同步一次可能需要耗时10分钟,可能需要耗时10小时

不论任务有没有执行完,到了12:30必须停止执行。


【ps:建议使用 quartz,timer,timeTask 这些的请勿回复,自己先弄清楚再回帖,谢谢!】
...全文
2653 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
代号793 2018-07-24
  • 打赏
  • 举报
回复
请看我的解决方案 https://blog.csdn.net/u011267841/article/details/81182897
钙奶加辣条。 2016-12-29
  • 打赏
  • 举报
回复
设置两个定时任务就行了,第一个执行你想要同步的方法,第二个终止这个方法。
浅笑天无情 2016-12-27
  • 打赏
  • 举报
回复
quartz
看小雪 2016-12-27
  • 打赏
  • 举报
回复
$time = time(); do{ //你的逻辑 while(time() - $time <= 30); 这段PHP程序的意思是执行30秒。 不会JAVA。只能帮你到这里了。
王世春 2016-12-24
  • 打赏
  • 举报
回复
好的,ScheduledExecutorService 之前倒是用过,不过ScheduledFuture倒是没用过。 thak u!
soton_dolphin 2016-12-24
  • 打赏
  • 举报
回复
还有一个接口是 ScheduledExecutorService ScheduledExecuterService service = Executors.newSinglThreadSchduledExecetor(); ScheduledFuture f = service.scheduleAtFixedDelay(task, initialDelay, period, time unit); if currentDate = 00:00 f.cancel() service.shutdown()
王世春 2016-12-24
  • 打赏
  • 举报
回复
你好,这个我目前是这么做的,但是终止线程最有效的方法是stop,关于stop方法官方给出的说法是有可能会有不可预知的后果。第二stop方法不能回收锁也是个问题。 这里有这样一个方法,大家可以参考下: public static Boolean execute(Callable<Boolean> task, int seconds) { Boolean result = Boolean.FALSE; ExecutorService threadPool = Executors.newFixedThreadPool(1); try { Future<Boolean> future = threadPool.submit(task); result = future.get(seconds, TimeUnit.SECONDS); } catch (Exception e) { result = Boolean.FALSE; e.printStackTrace(); } finally { threadPool.shutdownNow(); } return result; } jdk自带的超时机制,或者哥们你们有没有更好的方法,最好是示例!
yakamy 2016-12-24
  • 打赏
  • 举报
回复
或者说可以跑两个定时任务,一个开启同步数据,一个结束同步数据任务
yakamy 2016-12-24
  • 打赏
  • 举报
回复
应该可以开启一个线程,然后当超过时间直接把线程终止掉就可以了

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧