每次任务 创建 一个 Scheduler,运行完直接shutdown ,同时运行不相互影响.

创建Scheduler 不相互影响

用默认工厂类获取scheduler 实例 code 如下:

StdSchedulerFactory schf = newStdSchedulerFactory();

scheduler = schf.getScheduler();

但多次初始化:

 

例如

List list = new ArrayList();

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

 

{

StdSchedulerFactory schf =newStdSchedulerFactory();

scheduler= schf.getScheduler();

list .add(scheduler);

 

}

但是获取都是一个默认的Scheduler.即调用getDefaultScheduler

 

若需要获得不同的scheduler for中代码如下

 

Properties props = new Properties();

props.put("org.quartz.scheduler.instanceName", i+"");// 不同name

props.put("org.quartz.threadPool.class","org.quartz.simpl.SimpleThreadPool");

props.put("org.quartz.threadPool.threadCount","10");

StdSchedulerFactory schf = new StdSchedulerFactory();

schf.initialize(props);

scheduler = schf.getScheduler();

 

 

Scheduler 可以经过默认的配置文件 设置Scheduler name.由此不同实例里的Scheduler

是不同的,一个Scheduler.shutdown 不再会相互影响.

 

第二. 灵活配置time

例子如下:

 

private Scheduler scheduler;

    // public SchedulerUtil() throws SchedulerException
    // {
    // StdSchedulerFactory schf = new StdSchedulerFactory();
    // scheduler = schf.getScheduler();
    // }

    public SchedulerUtil(String name) throws SchedulerException
    {
        Properties props = new Properties();
        props.put("org.quartz.scheduler.instanceName", name);
        props.put("org.quartz.threadPool.class", "org.quartz.simpl.SimpleThreadPool");
        props.put("org.quartz.threadPool.threadCount", "10");
        StdSchedulerFactory schf = new StdSchedulerFactory();
        schf.initialize(props);
        scheduler = schf.getScheduler();

    }

    JobDetail jb1 = new JobDetail("job_1", "group_1", SimpleJob.class);
    
    public void taskRun()throws Exception
    {
        CronTrigger ct = new CronTrigger("trigger", "group");
        ct.setCronExpression("0/1 * * * * ?");
        scheduler.scheduleJob(jb1, ct);
        scheduler.start();
    }
    public void modifyTaskTime()throws Exception
    {
        CronTrigger ct = (CronTrigger) scheduler.getTrigger("trigger", "group");
        ct.setCronExpression("0/3 * * * * ?");
        scheduler.deleteJob("job_1", "group_1");
        scheduler.scheduleJob(jb1, ct);
    }</span>



 

 

package com.example; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; import okhttp3.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Main { //private static final CountDownLatch latch = new CountDownLatch(1); //private static final ExecutorService threadPool = Executors.newFixedThreadPool(3); public static void main(String[] args) throws Exception { String url = "https://mkts.chinaums.com"; String userInfo = "3BAF8F6F2A237A9819A8171679320C81BA00BF3D68D2370607B187B1F96E83D910336D47DE4AF1918AC85048A7EE9956DE27E0D03BE230E441CAD6E6E7902100578DB16887CF31C59C36D6F4F6027E6E42F254B1079AEACABC9A9991973B4330480D3BDD836B33B2D6E6F973EF90B54C94457680BCF1C267D6AEA5A4606B6EAD1BA2D7028DA7E58D92A28470EFA17FF1F08849B73EF6A903D8B45C4230F02171800E3E24A345F4DF1C2BEBC6413C92198FF39BF68CA6979F3610FB9909E0C4CC68940C925D30DB1F0ACDDCFFB32F53F979D3F934C0620F19E24D16ECE84748E47D060A743637F23E1BCA1D11FA207B66201E81AA837D7ECD0907F46173A841C2"; //抓包的订单号,抓一个复用就行 String phonePlatSsn = "9cb226f967f848e4893891dffb3b1e54"; String encryptData = "04d8dce452032247baf94f605d9d45e36d292b9cfa98b52fed41906abc49d7d20dce4a5c15cc35d580692025177062278569ef7c817cada4142158268ccfd1157bc80824d4706c5244fe7d487765fc7d7fc4cc5fc892d75c0688b433fd71f1a517ae9d51910f675ea9aeb2690bfd8a4d11457b06d7c3f440d17298e27db74e4e6395d29b2315ddb3fbdf8e47c5e7b9088f849cdd2cdbbab638be1f3108fd139514e3cb10dbfeb0591066dc1107e4c6e3b9072e0413273065999f05e5e64c1bdc51cc133547f9a2d6bf88dec6be3b62e5e3fcab086f2e8a36d57f862a433f7e1a9f669095611098ffc9ae"; //2923fe5dfd054fcab2bc71bf70ffde49 //576c0f7d702440ac8553b125381d2fc6 String userInfo2 = "99ABC0354673C069C84FF7EE6FD98D5C25A2C58EA94ED8FBD19ABA00703E7040E30B0853F536975080389F9D2AACC7DEFA96131B17FE1CF24294A18F496EF16EAA220165332A8553A2E219BB3A8EBAC57F578D17E4774BD4A64A82F8E668FDB0978B8F14C4D311D78D3F7435AA69328B2D1E3EFD462050F65E0E51C71BBC02CA0913CDCBC23C5DE7D31418BFA0A2F99287A70A26555F4E49873AFDA3DB309D2BAE1949AEB96475F674B06F3F177FDDA44A01E1890DA2163DD9A4F73B716E40D545EC1A3C22583C9F0A1DB5166346942C8B65C2B4D2C6D56D495A462D0AF607F2EF16AC167B957C2B47B49DC71254C10EC960F7D5C0CB13D9C5DEC6EBA1C572B3"; //抓包的订单号,抓一个复用就行 String phonePlatSsn2 = "446e4d6d38d74e038d6a6d45f2514245"; String encryptData2 = "04e830b679f8b990c864b93f08f81f14c323071299d6549949a2af4687d33e70539f6ae5233c73725d28ea09869e430d75cc2a6335d5cf766bb2b1efc71c390cad530e13ada752475b3b5a5d2318ac65d48a78978c78d97d655b0aecf3748f470780c0d202303005e397d5257fd4f7195d03cb3d6c8fdfbbf20ce3f389b756ad2ec38f23c895926413f9d984fa5895b1ccbd48afb01fa05e9ff97abd34cf1c5d4046ed667d64ee094d95ef1fe12ec42dbcc577681f389678f50390901ed06a851c19a6623b5c22c41eefe00e"; //设置当天时间9:59分后开抢 LocalDateTime dateTime = LocalDateTime.of(2025, 7, 21, 9, 49, 00); LocalDateTime endTime = LocalDateTime.of(2025, 7, 21, 10, 2, 0); Timer timer = new Timer(); //一个任务对应抢一种券 //电器:"/jdhsApi/jdhs/user/category/coupon/get/unionpay/householdAppliance" //WATER_PURIFIER 净水器 DISHWASHER 洗碗机 MICROWAVE_OVEN 微波炉 TV 电视 WASHER 洗衣机 AIRCONDITION1 空调1 AIRCONDITION2 空调2 AIRCONDITION3 空调3 //RANGE_HOOD 吸油烟机 //家装:"/jdhsApi/jdhs/user/remain/chance/unionpay/homeDecoration" //HOME_DECORATION 家装消费品 N 智能家具消费品 long startTime = System.currentTimeMillis(); StoppableTask waterpurifierTask = new StoppableTask() { @Override public void run() { try { if (LocalDateTime.now().isBefore(dateTime)) { System.out.println("净水器时间未到"); return; } System.out.println("净水器开抢"); OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) // 连接超时(TCP连接+SSL握手) .readTimeout(30, TimeUnit.SECONDS) // 读取超时(包括SSL握手后的数据传输) .writeTimeout(30, TimeUnit.SECONDS) .build(); String requestBody = String.format("{\"platSsn\": \"%s\", \"userInfo\": \"%s\", \"category\": \"WATER_PURIFIER\"}", phonePlatSsn, userInfo); //直接用抓包里的信息构造即可 Request request = new Request.Builder() .url(url + "/jdhsApi/jdhs/user/category/coupon/get/unionpay/householdAppliance") .post(RequestBody.create(requestBody,MediaType.parse("application/json"))) .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c33)XWEB/14185") .addHeader("Content-Type", "application/json") .addHeader("Accept", "*/*") .addHeader("Host", "mkts.chinaums.com") .addHeader("Connection", "keep-alive") .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { System.out.println("净水器请求异常:" + response);; } String body = response.body().string(); //自行在云闪付查看结果 System.out.println("净水器抢购结果:" + body); } } catch (Exception e) { System.err.println("自定义错误消息"); // 或者使用System.out e.printStackTrace(); // 这会打印到System.err } System.out.println("净水器抢购结束"); } }; StoppableTask dishwasherTask = new StoppableTask() { @Override public void run() { try { if (LocalDateTime.now().isBefore(dateTime)) { System.out.println("洗碗机时间未到"); return; } System.out.println("洗碗机开抢"); OkHttpClient client = new OkHttpClient(); String requestBody = String.format("{\"platSsn\": \"%s\", \"userInfo\": \"%s\", \"category\": \"DISHWASHER\"}", phonePlatSsn, userInfo); //直接用抓包里的信息构造即可 Request request = new Request.Builder() .url(url + "/jdhsApi/jdhs/user/category/coupon/get/unionpay/householdAppliance") .post(RequestBody.create(requestBody,MediaType.parse("application/json"))) .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c33)XWEB/14185") .addHeader("Content-Type", "application/json") .addHeader("Accept", "*/*") .addHeader("Host", "mkts.chinaums.com") .addHeader("Connection", "keep-alive") .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { System.out.println("洗碗机请求异常:" + response);; } String body = response.body().string(); //自行在云闪付查看结果 System.out.println("洗碗机抢购结果:" + body); } } catch (Exception e) { System.err.println("自定义错误消息"); // 或者使用System.out e.printStackTrace(); // 这会打印到System.err } System.out.println("洗碗机抢购结束"); } }; StoppableTask microwave_ovenTask = new StoppableTask() { @Override public void run() { try { if (LocalDateTime.now().isBefore(dateTime)) { System.out.println("微波炉时间未到"); return; } System.out.println("微波炉开抢"); OkHttpClient client = new OkHttpClient(); String requestBody = String.format("{\"platSsn\": \"%s\", \"userInfo\": \"%s\", \"category\": \"MICROWAVE_OVEN\"}", phonePlatSsn, userInfo); //直接用抓包里的信息构造即可 Request request = new Request.Builder() .url(url + "/jdhsApi/jdhs/user/category/coupon/get/unionpay/householdAppliance") .post(RequestBody.create(requestBody,MediaType.parse("application/json"))) .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c33)XWEB/14185") .addHeader("Content-Type", "application/json") .addHeader("Accept", "*/*") .addHeader("Host", "mkts.chinaums.com") .addHeader("Connection", "keep-alive") .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { System.out.println("微波炉请求异常:" + response);; } String body = response.body().string(); //自行在云闪付查看结果 System.out.println("微波炉抢购结果:" + body); } } catch (Exception e) { System.err.println("自定义错误消息"); // 或者使用System.out e.printStackTrace(); // 这会打印到System.err } System.out.println("微波炉抢购结束"); } }; StoppableTask home_decorationTask = new StoppableTask() { @Override public void run() { try { if (LocalDateTime.now().isBefore(dateTime)) { System.out.println("家装消费品时间未到"); return; } System.out.println("家装消费品开抢"); OkHttpClient client = new OkHttpClient(); String requestBody = String.format("{\"platSsn\": \"%s\", \"userInfo\": \"%s\", \"category\": \"HOME_DECORATION\"}", phonePlatSsn, userInfo); //直接用抓包里的信息构造即可 Request request = new Request.Builder() .url(url + "/jdhsApi/jdhs/user/category/coupon/get/unionpay/homeDecoration") .post(RequestBody.create(requestBody,MediaType.parse("application/json"))) .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c33)XWEB/14185") .addHeader("Content-Type", "application/json") .addHeader("Accept", "*/*") .addHeader("Host", "mkts.chinaums.com") .addHeader("Connection", "keep-alive") .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { System.out.println("家装消费品请求异常:" + response);; } String body = response.body().string(); //自行在云闪付查看结果 System.out.println("家装消费品抢购结果:" + body); } } catch (Exception e) { System.err.println("自定义错误消息"); // 或者使用System.out e.printStackTrace(); // 这会打印到System.err } System.out.println("家装消费品抢购结束"); } }; StoppableTask AIRCONDITION1Task = new StoppableTask() { @Override public void run() { try { if (LocalDateTime.now().isBefore(dateTime)) { System.out.println("空调1时间未到"); return; } System.out.println("空调1开抢"); OkHttpClient client = new OkHttpClient(); String requestBody = String.format("{\"platSsn\": \"%s\", \"userInfo\": \"%s\", \"category\": \"AIRCONDITION1\"}", phonePlatSsn2, userInfo2); //直接用抓包里的信息构造即可 Request request = new Request.Builder() .url(url + "/jdhsApi/jdhs/user/category/coupon/get/unionpay/householdAppliance") .post(RequestBody.create(requestBody,MediaType.parse("application/json"))) .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c33)XWEB/14185") .addHeader("Content-Type", "application/json") .addHeader("Accept", "*/*") .addHeader("Host", "mkts.chinaums.com") .addHeader("Connection", "keep-alive") .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { System.out.println("空调1请求异常:" + response);; } String body = response.body().string(); //自行在云闪付查看结果 System.out.println("空调1抢购结果:" + body); } } catch (Exception e) { System.err.println("自定义错误消息"); // 或者使用System.out e.printStackTrace(); // 这会打印到System.err } System.out.println("空调1抢购结束"); } }; StoppableTask RANGE_HOODTask = new StoppableTask() { @Override public void run() { try { if (LocalDateTime.now().isBefore(dateTime)) { System.out.println("吸油烟机时间未到"); return; } System.out.println("吸油烟机开抢"); OkHttpClient client = new OkHttpClient(); String requestBody = String.format("{\"platSsn\": \"%s\", \"userInfo\": \"%s\", \"category\": \"RANGE_HOOD\"}", phonePlatSsn2, userInfo2); //直接用抓包里的信息构造即可 Request request = new Request.Builder() .url(url + "/jdhsApi/jdhs/user/category/coupon/get/unionpay/householdAppliance") .post(RequestBody.create(requestBody,MediaType.parse("application/json"))) .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c33)XWEB/14185") .addHeader("Content-Type", "application/json") .addHeader("Accept", "*/*") .addHeader("Host", "mkts.chinaums.com") .addHeader("Connection", "keep-alive") .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { System.out.println("吸油烟机请求异常:" + response);; } String body = response.body().string(); //自行在云闪付查看结果 System.out.println("吸油烟机抢购结果:" + body); } } catch (Exception e) { System.err.println("自定义错误消息"); // 或者使用System.out e.printStackTrace(); // 这会打印到System.err } System.out.println("吸油烟机抢购结束"); } }; StoppableTask AIRCONDITION3Task = new StoppableTask() { @Override public void run() { try { if (LocalDateTime.now().isBefore(dateTime)) { System.out.println("空调3时间未到"); return; } System.out.println("空调3开抢"); OkHttpClient client = new OkHttpClient(); String requestBody = String.format("{\"platSsn\": \"%s\", \"userInfo\": \"%s\", \"category\": \"HOME_DECORATION\"}", phonePlatSsn2, userInfo2); //直接用抓包里的信息构造即可 Request request = new Request.Builder() .url(url + "/jdhsApi/jdhs/user/category/coupon/get/unionpay/householdAppliance") .post(RequestBody.create(requestBody,MediaType.parse("application/json"))) .addHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 MicroMessenger/7.0.20.1781(0x6700143B) NetType/WIFI MiniProgramEnv/Windows WindowsWechat/WMPF WindowsWechat(0x63090c33)XWEB/14185") .addHeader("Content-Type", "application/json") .addHeader("Accept", "*/*") .addHeader("Host", "mkts.chinaums.com") .addHeader("Connection", "keep-alive") .build(); try (Response response = client.newCall(request).execute()) { if (!response.isSuccessful()) { System.out.println("空调3请求异常:" + response);; } String body = response.body().string(); //自行在云闪付查看结果 System.out.println("空调3抢购结果:" + body); } } catch (Exception e) { System.err.println("自定义错误消息"); // 或者使用System.out e.printStackTrace(); // 这会打印到System.err } System.out.println("空调3抢购结束"); } }; long delay = 0; //延迟0毫秒后开始执行 long period = 10; //每10ms执行一次 timer.scheduleAtFixedRate(new TimerTask() { @Override public void run() { //用线程异步执行 Thread thread = new Thread(waterpurifierTask); Thread thread1 = new Thread(dishwasherTask); Thread thread2 = new Thread(microwave_ovenTask); Thread thread3 = new Thread(home_decorationTask); Thread thread4 = new Thread(AIRCONDITION1Task); Thread thread5 = new Thread(RANGE_HOODTask); Thread thread6 = new Thread(AIRCONDITION3Task); if (System.currentTimeMillis() - startTime > 20_000) { waterpurifierTask.stop(); // 停止任务 dishwasherTask.stop(); microwave_ovenTask.stop(); home_decorationTask.stop(); AIRCONDITION1Task.stop(); RANGE_HOODTask.stop(); AIRCONDITION3Task.stop(); this.cancel(); // 取消TimerTask timer.cancel(); // 停止定时器 return; } thread.start(); thread1.start(); thread2.start(); thread3.start(); thread4.start(); thread5.start(); thread6.start(); } }, delay, period); Thread.sleep(1000 * 60 * 60 * 60); } } class StoppableTask implements Runnable { private volatile boolean stopped = false; public void stop() { stopped = true; } @Override public void run() { while (!stopped) { // 执行任务逻辑 // 添加Thread.sleep()等控制点 } } } 要求到达endTime后停止所有任务
最新发布
07-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值