1.従来のタイマー
1.1タイマー
10秒にプログラムの実施後1
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("开始打印。。。");
}
}, 10000);
10秒、3秒にプログラムの実施後2、その後、実行しませんでした
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
System.out.println("开始打印。。。");
}
}, 10000,3000);
1.2 TimerTaskを
1タイマー2秒、4秒をしようと、実行を行う2秒続くと、その後等々4秒で行い、を行います
カスタムTimerTaskを
package com.bjc.thread.demo2;
import java.util.Timer;
import java.util.TimerTask;
public class MyTimerTask extends TimerTask{
private static Integer count = 0;
@Override
public void run() {
count = (count + 1) % 2;
System.out.println("乓!");
new Timer().schedule(new MyTimerTask(), 2000 + 2000 * count);
}
}
コール
package com.bjc.thread.demo2;
import java.util.Date;
import java.util.Timer;
public class TranditionalTimer {
public static void main(String[] args) throws InterruptedException {
Timer timer = new Timer();
timer.schedule(new MyTimerTask(), 2000);
while(true){
System.out.println(new Date().getSeconds());
Thread.sleep(1000);
}
}
}
結果:
2.タイミングフレームクォーツ
2.1はじめに
クォーツは、あなたが実行したい任意のタスクを実行するための、Javaベースの実装のためのタスクスケジューリングフレームワークです。
クォーツは責任達するまでの時間(議題に含まれる)、オープンソースのジョブスケジューリングシステムの完全にJava開発で、「タスクの進捗状況Managerは、」所定の時間の一つであるOpenSymphonyのオープンソースコミュニティとジョブスケジューリング分野におけるオープンソースプロジェクトです実行システム(または通知)他のソフトウェアコンポーネント。
小さなJavaライブラリの配布ファイル(.jarファイル)とクォーツ、クォーツライブラリファイルには、すべてのコア機能が含まれています。これらのインタフェース(API)の主な機能は、スケジューラインタフェースです。スケジュールにタスクまたはスケジュールをキャンセルし、開始/停止/一時停止スケジュール進捗:それはのような簡単な操作を提供します。
公式ウェブサイトはhttp://www.quartz-scheduler.orgです
2.2クォーツランタイム環境
1.クォーツは、別の実行スタンドアロンアプリケーションに埋め込むことができます
2.石英は、アプリケーションサーバ(またはサーブレットコンテナ)内でインスタンス化されてもよいし、トランザクションに関与しています
3.クォーツがスタンドアロンプログラム(独自のJava仮想マシン)として使用することができ、あなたは、RMIを使用することができます
4.石英は、ジョブの実行のために、別個のアイテムクラスタ(ロードバランシングおよびフェイルオーバー機能)として、インスタンス化することができます。
2.3クォーツコア・コンセプト
2.3.1タスクの仕事
ジョブ・クラスを使用すると、各ジョブがorg.quartz.job実装しなければならないインターフェースを実現したいというタスクである、とだけインターフェイスで定義されてexecute()メソッドを実装する必要があります。
2.3.2トリガトリガ
タスクを実行するためのトリガのトリガ、例えば、送信したいが、3時、毎日の統計電子メール時限、トリガーは3時のタスクを実行するように設定され、トリガは、主に2 SimpleTriggerとCronTrigger 2種類があります。
2.3.3スケジューラスケジューラ
スケジューラがタスクスケジューラで、それがトリガータスクジョブをトリガし、トリガに基づいて時間を設定したジョブを実行する責任が統合されます
ケースを入手2.4
2.4.1開発環境の準備
新しいMavenプロジェクトを作成しますquartzDemo
2.4.2追加の依存性
石英依存を追加
倉庫ではhttps://www.mvnrepository.com、石英、石英を検索して見つけるクォーツジョブズ石英依存性に追加し、タグに依存関係タグを追加し、依存、その後のpom.xmlファイルを
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
Mavenの依存関係の下でビュー依存jarファイルを追加した後、我々は、ログを追加する必要があるので、瓶を頼って、そのSLF4Jインターフェースのjarパッケージの下に
右--mavenは - 依存性、入力slf4、図を追加します。
同じステップにおいて、入力のlog4j
最後に、log4jの設定ファイルを追加
2.4.3コンパイラー環境を変更します
添加が完了依存したら、我々はその1.5コンパイラー環境を発見し、我々はそれが1.8になりたい、この時間は、あなたはMavenのプラグインを追加することができます
右--maven - Mavenのコンパイルを入力して、プラグインを追加します
次に、のpom.xmlに、プラグイン構成のタグコンパイル・バージョンに対応する以下の構成を追加
<configuration>
<target>1.8</target>
<source>1.8</source>
</configuration>
コンプリートのpom.xml次のように:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.bjc</groupId>
<artifactId>quartzDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 添加依赖 -->
<dependencies>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
<version>2.3.0</version>
</dependency>
<!-- quartz依赖日志接口slf4j-api-1.7.7.jar ,所以也需要log4j-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.12</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<target>1.8</target>
<source>1.8</source>
</configuration>
</plugin>
</plugins>
</build>
</project>
2.4.4ケースコード
職種を作成します。1.
ジョブ・クラスは、ジョブを実装する必要があります
package cn.bjc.quartz.job;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
public class HelloJob implements Job {
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
Calendar calendar = Calendar.getInstance();
Date time = calendar.getTime();
String format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time);
System.out.println("任务开始执行,时间是:" + format);
}
}
作成2.新しいメインスケジューリング・クラスを実行します
3つのステップに分け:
1. StdSchedulerFactoryの工場から得られたスケジューラ(スケジューラ)
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
注意:这个默认的调度器内部其实是返回new StdSchedulerFactory()
2. 任务实例(JobDetail),通过JobBuilder创建
3. 触发器(Trigger)
代码:
package cn.bjc.quartz.main;
import org.quartz.JobBuilder;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SimpleScheduleBuilder;
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import cn.bjc.quartz.job.HelloJob;
public class HelloSchedulerDemo {
public static void main(String[] args) throws Exception {
// 1. 调度器(Scheduler),从工厂获取
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler(); // 内部默认是new StdSchedulerFactory()
// 2. 任务实例(JobDetail),通过JobBuilder创建
JobDetail jobDetail = JobBuilder.newJob(HelloJob.class) // 加载任务类,与HelloJob绑定
.withIdentity("job1", "group1") // 参数一:任务的名称(唯一实例);参数二:任务组的名称,对任务进行分组
.build();
// 3. 触发器(Trigger)
Trigger trigger = TriggerBuilder.newTrigger()
.withIdentity("trigger1", "group1") // 参数一:触发器的名称;参数二:触发器组的名称,对触发器进行分组
.startNow() // 启动时间,这里设置马上启动
.withSchedule(SimpleScheduleBuilder.simpleSchedule().repeatSecondlyForever(5))// 每5秒重复执行
.build();
// 最后,让调度器关联任务和触发器,保证按照触发器定义的条件去执行任务。
scheduler.scheduleJob(jobDetail, trigger);
// 启动
scheduler.start();
}
}
运行效果: