「Java轮训任务」Java轮训

博主:adminadmin 2022-12-14 15:42:08 57

今天给各位分享Java轮训任务的知识,其中也会对Java轮训进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java的几种定时任务

java定时任务有三种:

- JDK自带 :JDK自带的Timer以及JDK1.5+ 新增的ScheduledExecutorService;

- Quartz    :简单却强大的JAVA作业调度框架

- Spring3.0以后自带的task :可以将它看成一个轻量级的Quartz,而且使用起来比Quartz简单许多;

代码参考:

JDK 自带的定时器实现

schedule(TimerTask task, Date time) 特定时间执行

public static void main(String[] args) {

for (int i = 0; i 10; ++i) {

new Timer("timer - " + i).schedule(new TimerTask() {

@Override

public void run() {

println(Thread.currentThread().getName() + " run ");

}

}, new Date(System.currentTimeMillis() + 2000));

}

}

Quartz 定时器实现

2.1  通过maven引入依赖(这里主要介绍2.3.0)  注意:shiro-scheduler中依赖的是1.x版本  如果同时使用会冲突

!-- --

dependency

groupIdorg.quartz-scheduler/groupId

artifactIdquartz/artifactId

version2.3.0/version

/dependency

2.2 创建Job类

public class TestJob implements Job{

@Override

public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {

println(Thread.currentThread().getName() + " test job begin " + DateUtil.getCurrentTimeStr());

}

}

2.3 调度任务

public static void main(String[] args) throws InterruptedException, SchedulerException {

Scheduler scheduler = new StdSchedulerFactory().getScheduler();

// 开始

scheduler.start();

// job 唯一标识 test.test-1

JobKey jobKey = new JobKey("test" , "test-1");

JobDetail jobDetail = JobBuilder.newJob(TestJob.class).withIdentity(jobKey).build();

Trigger trigger = TriggerBuilder.newTrigger() .withIdentity("test" , "test")

// 延迟一秒执行

.startAt(new Date(System.currentTimeMillis() + 1000))

// 每隔一秒执行 并一直重复

.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(1).repeatForever())

.build();

scheduler.scheduleJob(jobDetail , trigger);

Thread.sleep(5000);

// 删除job

scheduler.deleteJob(jobKey);

}

3.Spring 相关的任务调度

3.1 配置文件实现

spring-schedule.xml

task:scheduler id="myScheduler" pool-size="10" /

task:scheduled-tasks scheduler="myScheduler"

task:scheduled ref="job" method="test" cron="0 * * * * ?"/

/task:scheduled-tasks

3.2注解实现

spring-schedule.xml

task:scheduler id="myScheduler" pool-size="10" /

// 启用注解

task:annotation-driven scheduler="myScheduler"/

@Component 

public class Task{    

@Scheduled(cron="0/5 * *  * * ? ")   //每5秒执行一次

public void execute(){  

DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");  

System.out.println(sdf.format(DateTime.now().toDate())+"*********B任务每5秒执行一次进入测试");    

}     

}

java每天只能执行一个任务

一、用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轮询请求接口直至成功怎么做

while(true){

    boolean result = requestService(params...);

    if(result){

        break;

    }

    Thread.sleep(5000);

}

java程序员职责是什么?

1、建立网站

Java同样也在电子商务和网站开发上有着广泛的运用。许多政府,医疗,保险,教育,国防和其他部门的网站都是建立在java之上的。

2、Android开发

Android是一种根据Linux的随意及对外开放源码的电脑操作系统,其源码是Java。Java做安卓系统不仅仅是指系统软件,也有针对APP的。

3、软件开发

一般计算机语言都能够软件开发的,Java都不列外,比如Eclipse,MyEclipse等著名Java开发环境。大到全国通的系统软件,小到中小型企业的运用解决方法,Java都占据极其重要的影响力。

5、内嵌式:WriteOnce,RunAnywhere。内嵌式行业好像为Java量身定做打造出。

6、互联网大数据:Hadoop及其别的大数据处理技术性许多 全是用Java。

7、科学研究运用:Java的安全系数、便携式让Java在科学研究运用、金融信息服务、室内空间极大。

如何用java编写一个监测类软件,功能如下

起一个定时任务去轮训接口的返回值就可以了,如果集成了spring就用cron表达式来实现。

如果没有集成,就用timer来显示定时执行任务

Java轮训任务的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于Java轮训、Java轮训任务的信息别忘了在本站进行查找喔。

The End

发布于:2022-12-14,除非注明,否则均为首码项目网原创文章,转载请注明出处。