栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java------多线程

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java------多线程

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;


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---------------------------");
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/644094.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号