java每天只能执行一个任务

Python012

java每天只能执行一个任务,第1张

一、用java.util.Timer

使用JAVA类Timer可实现简单的延迟和周期性任务,其中的任务使用java.util.TimerTask表示。任务的执行方式有两种:

按固定速率执行:即scheduleAtFixedRate的两个重载方法

Timer timer = newTimer()

timer. scheduleAtFixedRate(newTimerTask() {

@Overridepublic voidrun() {

System.out.println("Timer is running")

}

},2000, 5000)

按固定延迟执行:即schedule的4个重载方法

Timer timer = newTimer()

timer.schedule(newTimerTask() {

@Overridepublic voidrun() {

System.out.println("Timer is running")

}

},2000)

我们要实现一个定时任务,只需要实现TimerTask的run方法即可。每一个任务都有下一次执行时间nextExecutionTime(毫秒),如果是周期性的任务,那么每次执行都会更新这个时间为下一次的执行时间,当nextExecutionTime小于当前时间时,都会执行它。

Timer的缺陷

1、由于执行任务的线程只有一个,所以如果某个任务的执行时间过长,那么将破坏其他任务的定时精确性。如一个任务每1秒执行一次,而另一个任务执行一次需要5秒,那么如果是固定速率的任务,那么会在5秒这个任务执行完成后连续执行5次,而固定延迟的任务将丢失4次执行。

2、如果执行某个任务过程中抛出了异常,那么执行线程将会终止,导致Timer中的其他任务也不能再执行。

3、Timer使用的是绝对时间,即是某个时间点,所以它执行依赖系统的时间,如果系统时间修改了的话,将导致任务可能不会被执行。

二、使用ScheduledThreadPoolExecutor

由于Timer存在上面说的这些缺陷,在JDK1.5中,我们可以使用ScheduledThreadPoolExecutor来代替它,使用Executors.newScheduledThreadPool工厂方法或使用ScheduledThreadPoolExecutor的构造函数来创建定时任务,它是基于线程池的实现,不会存在Timer存在的上述问题,当线程数量为1时,它相当于Timer。

ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5)

scheduledThreadPool.schedule(newRunnable() {public voidrun() {

System.out.println("delay 3 seconds")

}

},3, TimeUnit.SECONDS)

scheduledThreadPool.scheduleAtFixedRate(()->System.out.println("delay 1 seconds, and excute every 3 seconds")

,1, 3, TimeUnit.SECONDS)

java程序员每天要做的主要有:需求分析、框架选型、编码、测试、改bug等。

1、需求分析

在接到开发任务时,java程序员首先要对这个任务进行需求分析,了解时间节点、任务目标、需要什么元素等等,梳理好工作流程之后再开始进行开发工作。

2、框架选择

在开始编程之前还需要先调研有哪些工具或者框架可以来做这个事,分别有哪些优缺点,针对自己的项目,哪个比较合适一些,甚至可以写个demo来试看看是否有什么问题。

3、编码

准备工作都做好后就要开始编程开发了,java程序员每天大部分时间都被用来编程。

4、测试并改bug

程序编写好后需要程序员做初步的测试看看程序能不能跑起来同时生产程序在跑的过程中,可能会出现各种各样的异常,如果有问题需要程序员及时查看日志,查问题,解决问题。