Java------多线程_高级主题_定时调度_quartz(十三)

Java------多线程_高级主题_定时调度_quartez(十三)
定时调度
通过Timer和Timetask,可以实现定时启动某个线程。
java.util.Timer:类似闹钟的功能,本身实现的就是一个线程。
java.util.TimerTask:一个抽象类,该类实现了Runnable接口,所以该类具备多线程的能力。
Timer:线程调度任务,以供将来在后台线程中执行的功能。任务可以安排一次执行,也可以定期多次执行。
TimerTask:可以由Timer进行一次性或重复执行的任务。抽象类,重写run方法。
定时调度示例代码:

package cooperation;

import java.util.*;

public class ThreadTimer {
    public static void main(String[] args) {
        Timer timer = new Timer();
        //执行安排
//        timer.schedule(new MyTask(),1000);  //1秒后执行一次
//        timer.schedule(new MyTask(),1000,1000); //1秒后执行,每1秒执行一次
        Calendar calendar = new GregorianCalendar(2021,12,06,15,43,01);
        timer.schedule(new MyTask(),calendar.getTime(),1000); //指定时间后运行


    }
}

class MyTask extends TimerTask {
    @Override
    public void run() {
        for (int i = 0 ;i<10;i++){
            System.out.println("休息时间---"+i);
        }
        System.out.println("end-------------------");
    }
}

quartz
复杂的任务调度则使用quartz。
Scheduler:调度器,控制所有的调度
Tigger:触发条件,采用DSL模式
JobDetail:需要处理的Job
Job:执行逻辑
DSL:Domain-specific language领域特定语言,针对一个特定的领域,具有受限表达性的一种计算机程序语言,即领域专用语言,声明式编程:
1.Method Chaining 方法链,Fluent Style流畅风格,builder模式构建器
2.Nested Functions 嵌套函数
3.Lamdba Expressions/Closures
4.Functional Sequence
quartz案例代码

import org.quartz.*;
import org.quartz.impl.StdSchedulerFactory;

import java.util.Date;

import static org.quartz.DateBuilder.evenMinuteDateAfterNow;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.TriggerBuilder.newTrigger;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;

/**
 * quartz学习入门
 */
public class SimpleExample {

    public void run() throws Exception{
        //1.创建Scheduler的工厂
        SchedulerFactory sf = new StdSchedulerFactory();
        //2.从工厂中获得调度器
        Scheduler scheduler = sf.getScheduler();
        //3.创建JobDetail
        JobDetail job = newJob(HelloJob.class).withIdentity("job1","group1").build();
        //时间
        Date runTime = evenMinuteDateAfterNow();
        //4.触发器
        Trigger trigger = newTrigger().withIdentity("job1", "group1").startAt(runTime).build();
        //多次执行  间隔10秒,重复10次
        SimpleTrigger trigger1 = newTrigger().withIdentity("job1", "group1").startAt(runTime).withSchedule(simpleSchedule()
                .withIntervalInSeconds(10).withRepeatCount(10)).build();
        //5.注册任务和触发条件
        scheduler.scheduleJob(job,trigger);
        //6.启动
        scheduler.start();
        //5秒后停止
        Thread.sleep(5L*1000L);
        scheduler.shutdown(true);
    }

    public static void main(String[] args) throws Exception {
        SimpleExample simpleExample = new SimpleExample();
        simpleExample.run();
    }
}

其中helloJob是自定义的任务

public class HelloJob implements Job {

    @Override
    public void interrupt() throws UnableToInterruptJobException {

    }

    @Override
    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
        System.out.println("start---------------------------");
        System.out.println("hello world"+new Date());
        System.out.println("end---------------------------");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,需要在pom.xml中引入以下依赖: ```xml <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>${quartz.version}</version> </dependency> ``` 其中,`${spring.version}`和`${quartz.version}`是对应的版本号。 接着,在Spring配置文件中配置`SchedulerFactoryBean`和`JobDetailFactoryBean`: ```xml <bean id="scheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!--自动启动 --> <property name="autoStartup" value="true" /> <!--配置数据源 --> <property name="dataSource" ref="dataSource" /> <!--配置Quartz的属性 --> <property name="quartzProperties"> <props> <prop key="org.quartz.scheduler.instanceName">Scheduler</prop> <prop key="org.quartz.scheduler.instanceId">AUTO</prop> <prop key="org.quartz.scheduler.skipUpdateCheck">true</prop> <prop key="org.quartz.scheduler.jmx.export">true</prop> <prop key="org.quartz.jobStore.class">org.quartz.impl.jdbcjobstore.JobStoreTX</prop> <prop key="org.quartz.jobStore.driverDelegateClass">org.quartz.impl.jdbcjobstore.StdJDBCDelegate</prop> <prop key="org.quartz.jobStore.tablePrefix">QRTZ_</prop> <prop key="org.quartz.jobStore.isClustered">false</prop> <prop key="org.quartz.threadPool.class">org.quartz.simpl.SimpleThreadPool</prop> <prop key="org.quartz.threadPool.threadCount">10</prop> <prop key="org.quartz.threadPool.threadPriority">5</prop> </props> </property> <!--配置JobDetail --> <property name="jobDetails"> <list> <bean id="jobDetailFactoryBean" class="org.springframework.scheduling.quartz.JobDetailFactoryBean"> <!--要执行的Job类 --> <property name="jobClass" value="com.example.job.MyJob" /> <!--Job的名称 --> <property name="name" value="MyJob" /> <!--Job的分组 --> <property name="group" value="MyJobGroup" /> <!--是否持久化 --> <property name="durability" value="true" /> <!--是否可以被其他任务替代 --> <property name="requestsRecovery" value="true" /> </bean> </list> </property> <!--配置Trigger --> <property name="triggers"> <list> <bean id="cronTriggerFactoryBean" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> <!--绑定JobDetail --> <property name="jobDetail" ref="jobDetailFactoryBean" /> <!--触发器的名称 --> <property name="name" value="MyTrigger" /> <!--触发器的分组 --> <property name="group" value="MyTriggerGroup" /> <!--Cron表达式 --> <property name="cronExpression" value="0/10 * * * * ?" /> </bean> </list> </property> </bean> ``` 其中,`SchedulerFactoryBean`是Quartz的核心类,用于创建和管理Quartz的`Scheduler`对象。`JobDetailFactoryBean`用于创建`JobDetail`对象,`CronTriggerFactoryBean`用于创建`Trigger`对象。 在上述配置中,我们配置了一个名为`MyJob`的Job,它由`com.example.job.MyJob`类实现,执行逻辑在该类的`executeInternal()`方法中。我们还配置了一个名为`MyTrigger`的Trigger,它使用Cron表达式`0/10 * * * * ?`,表示每隔10秒执行一次。 最后,在`com.example.job.MyJob`类中实现我们的业务逻辑: ```java public class MyJob extends QuartzJobBean { @Override protected void executeInternal(JobExecutionContext jobExecutionContext) throws JobExecutionException { // 执行业务逻辑 } } ``` 当配置完成后,启动Spring应用程序,Quartz就会按照我们的配置执行定时任务了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值