⑴ java定時器循環執行多個任務,比如A執行完了後3秒鍾執行B,讓後在3秒鍾執行C,然後再執行A依次循環。
java 自帶的,都是一個介面或類。。。
那就是在A完成時,等待3秒,創建B實例,並啟動。。。。。。重復A的結束時的動作、創建C。。。。。。。。
⑵ java 定時任務的幾種實現方式
JDK 自帶的定時器實現
// schele(TimerTask task, long delay) 延遲 delay 毫秒 執行
// schele(TimerTask task, Date time) 特定時間執行
public static void main(String[] args) {
for (int i = 0; i < 10; ++i) {
new Timer("timer - " + i).schele(new TimerTask() {
@Override
public void run() {
println(Thread.currentThread().getName() + " run ");
}
}, 1000);
}
}
2. Quartz 定時器實現
//首先我們需要定義一個任務類,比如為MyJob02 ,
//該類需要繼承Job類,然後添加execute(JobExecutionContext context)方法,在
//這個方法中就是我們具體的任務執行的地方。
//由希望由調度程序執行的組件實現的介面
public class MyJob02 implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
// TODO Auto-generated method stub
// 執行響應的任務.
System.out.println("HelloJob.execute,"+new Date());
}
}
public class QuartzTest5 {
public static void main(String[] args) throws Exception {
//SchelerFactory 是一個介面,用於Scheler的創建和管理
SchelerFactory factory = new StdSchelerFactory();
//從工廠裡面拿到一個scheler實例
//計劃表(可能翻譯的不太貼切),現在我們有了要做的內容,
//與調度程序交互的主要API
/*
* Scheler的生命期,從SchelerFactory創建它時開始,
到Scheler調用shutdown()方法時結束;Scheler被創建後,
可以增加、刪除和列舉Job和Trigger,以及執行其它與調度相關的操作
(如暫停Trigger)。但是,Scheler只有在調用start()方法後,
才會真正地觸發trigger(即執行job)
*/
Scheler scheler = factory.getScheler();
//具體任務.
//用於定義作業的實例
//JobBuilder - 用於定義/構建JobDetail實例,用於定義作業的實例。
JobDetail job = JobBuilder.newJob(MyJob.class).withIdentity("job1", "group1").build();
//Trigger(即觸發器) - 定義執行給定作業的計劃的組件
//TriggerBuilder - 用於定義/構建觸發器實例
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1")
.withSchele(CronScheleBuilder.cronSchele("0/1 * * * * ?")).build();
scheler.scheleJob(job, trigger);
scheler.start();
}
3. Spring boot 任務調度(這個非常容易實現)
/*
* 開啟對定時任務的支持
* 在相應的方法上添加@Scheled聲明需要執行的定時任務。
*/
@EnableScheling
//@EnableScheling註解來開啟對計劃任務的支持
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
@Component
public class ScheledTasks {
private Logger logger = LoggerFactory.getLogger(ScheledTasks.class);
private int i=0;
//0 0 0 2 * ?
@Scheled(cron="* * * 2 * ?")
//@Scheled 註解用於標注這個方法是一個定時任務的方法
public void testFixDelay() {
logger.info("執行方法"+i++);
}
⑶ java 如何設定時間執行程序
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class Test {
public static void main(String[] args) {
//timer1();
timer2();
//timer3();
//timer4();
}
// 第一種方法:設定指定任務task在指定時間執行 schele(TimerTask task, Date time)
public static void timer1() {
Timer timer = new Timer();
timer.schele(new TimerTask() {
public void run() {
System.out.println("-------設定要指定任務--------");
}
}, 2000);// 設定指定的時間time,此處為2000毫秒
}
// 第二種方法:設定指定任務task在指定延遲delay後進行固定延遲peroid的執行
// schele(TimerTask task, long delay, long period)
public static void timer2() {
Timer timer = new Timer();
timer.schele(new TimerTask() {
public void run() {
System.out.println("-------設定要指定任務--------");
}
}, 1000, 1000);
}
// 第三種方法:設定指定任務task在指定延遲delay後進行固定頻率peroid的執行。
// scheleAtFixedRate(TimerTask task, long delay, long period)
public static void timer3() {
Timer timer = new Timer();
timer.scheleAtFixedRate(new TimerTask() {
public void run() {
System.out.println("-------設定要指定任務--------");
}
}, 1000, 2000);
}
// 第四種方法:安排指定的任務task在指定的時間firstTime開始進行重復的固定速率period執行.
// Timer.scheleAtFixedRate(TimerTask task,Date firstTime,long period)
public static void timer4() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 12); // 控制時
calendar.set(Calendar.MINUTE, 0); // 控制分
calendar.set(Calendar.SECOND, 0); // 控制秒
Date time = calendar.getTime(); // 得出執行任務的時間,此處為今天的12:00:00
Timer timer = new Timer();
timer.scheleAtFixedRate(new TimerTask() {
public void run() {
System.out.println("-------設定要指定任務--------");
}
}, time, 1000 * 60 * 60 * 24);// 這里設定將延時每天固定執行
}
}
⑷ java 定時器幾種方式
//第一種方法:設定指定任務task在指定時間time執行schele(TimerTasktask,Datetime)
publicstaticvoidtimer1(){
Timertimer=newTimer();
timer.schele(newTimerTask(){
publicvoidrun(){
System.out.println("-------設定要指定任務--------");
}
},2000);//設定指定的時間time,此處為2000毫秒
}
//第二種方法:設定指定任務task在指定延遲delay後進行固定延遲peroid的執行
//schele(TimerTasktask,longdelay,longperiod)
publicstaticvoidtimer2(){
Timertimer=newTimer();
timer.schele(newTimerTask(){
publicvoidrun(){
System.out.println("-------設定要指定任務--------");
}
},1000,5000);
}
//第三種方法:設定指定任務task在指定延遲delay後進行固定頻率peroid的執行。
//scheleAtFixedRate(TimerTasktask,longdelay,longperiod)
publicstaticvoidtimer3(){
Timertimer=newTimer();
timer.scheleAtFixedRate(newTimerTask(){
publicvoidrun(){
System.out.println("-------設定要指定任務--------");
}
},1000,2000);
}
//第四種方法:安排指定的任務task在指定的時間firstTime開始進行重復的固定速率period執行.
//Timer.scheleAtFixedRate(TimerTasktask,DatefirstTime,longperiod)
publicstaticvoidtimer4(){
Calendarcalendar=Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY,12);//控制時
calendar.set(Calendar.MINUTE,0);//控制分
calendar.set(Calendar.SECOND,0);//控制秒
Datetime=calendar.getTime();//得出執行任務的時間,此處為今天的12:00:00
Timertimer=newTimer();
timer.scheleAtFixedRate(newTimerTask(){
publicvoidrun(){
System.out.println("-------設定要指定任務--------");
}
},time,1000*60*60*24);//這里設定將延時每天固定執行
}
⑸ java定時器
importjava.io.IOException;
importjava.util.Timer;
publicclassTimerTest{
publicstaticvoidmain(String[]args){
Timertimer=newTimer();
timer.schele(newMyTask(),1000,2000);//在1秒後執行此任務,每次間隔2秒,如果傳遞一個Data參數,就可以在某個固定的時間執行這個任務.
while(true){//這個是用來停止此任務的,否則就一直循環執行此任務了
try{
intch=System.in.read();
if(ch-'c'==0){
timer.cancel();//使用這個方法退出任務
}
}catch(IOExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
staticclassMyTaskextendsjava.util.TimerTask{
@Override
publicvoidrun(){
//TODOAuto-generatedmethodstub
System.out.println("________");
}
}
}
這段代碼基本能滿足你需求了 你還有需求就在上面再套一層job 當然如過太復雜了而且這種定時需求很多的話 建議用quartz框架 使用很簡單
⑹ java中每個月第一天執行一次任務的定時器如何實現
Date d = new Date();//獲取伺服器的時間。。。
Calendar c= Canlendar.getInstance();
c.setTime(d);
if(c.get(Calendar.DAY_OF_MONTH) == 1) //當前是1號
{
//拿出黨員的入黨日期(年月)同當前月進行比較 如果相同 發送簡訊
// //寫下你的判斷代碼
}
else //當前不是1號 則從下個月1號開始執行定期任務
{
c.set(Calendar.MONTH,c.get(Calendar.MONTH)+ 1);//設置為下月
c.set(Calendar.DAY_OF_MONTH,1);//設置為下月的1號
Timer timer =new Timer();
timer.scheleAtFixedRate(new TimerTask()
{
public void run()
{
//每天都來判斷一下 如果當前日期是1號
////則拿出黨員的入黨日期(年月)同當前月進行比較 如果相同 發送簡訊
//run函數里寫下你的判斷代碼
}},c.getTime(),24* 3600*1000); //每天執行一次run()方法...
}
⑺ 在Java中如何設置一個定時任務,在每天的一個時間點自動執行一個特定的程序具體代碼怎麼寫代碼全點
Quartz定時機制
首先導入jar包到程序內 quartz-all-1.6.0.jar
然後創建一個XML
TimeConfig.xml 名字可以自己定義
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="mainTask" class="net.timed.MainTask"/> //你要執行的任務類
//jar類
<bean id="mainJob" class="org.springframework.scheling.quartz.">
<property name="targetObject">
<ref bean="mainTask"/>//將你的類添加到定時器當中
</property>
<property name="targetMethod">
<value>execute</value> //定時執行類裡面的哪個方法
</property>
</bean>
<bean id="timeTrigger" class="org.springframework.scheling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="mainJob"/>
</property>
<!--
0 0 10,14,16 * * ? 每天上午10點,下午2點,4點
0 0/30 9-17 * * ? 朝九晚五工作時間內每半小時
0 0 12 ? * WED 表示每個星期三中午12點
"0 0 12 * * ?" 每天中午12點觸發
"0 15 10 ? * *" 每天上午10:15觸發
"0 15 10 * * ?" 每天上午10:15觸發
"0 15 10 * * ? *" 每天上午10:15觸發
"0 15 10 * * ? 2005" 2005年的每天上午10:15觸發
"0 * 14 * * ?" 在每天下午2點到下午2:59期間的每1分鍾觸發
"0 0/5 14 * * ?" 在每天下午2點到下午2:55期間的每5分鍾觸發
"0 0/5 14,18 * * ?" 在每天下午2點到2:55期間和下午6點到6:55期間的每5分鍾觸發
"0 0-5 14 * * ?" 在每天下午2點到下午2:05期間的每1分鍾觸發
"0 10,44 14 ? 3 WED" 每年三月的星期三的下午2:10和2:44觸發
"0 15 10 ? * MON-FRI" 周一至周五的上午10:15觸發
"0 15 10 15 * ?" 每月15日上午10:15觸發
"0 15 10 L * ?" 每月最後一日的上午10:15觸發
"0 15 10 ? * 6L" 每月的最後一個星期五上午10:15觸發
"0 15 10 ? * 6L 2002-2005" 2002年至2005年的每月的最後一個星期五上午10:15觸發
"0 15 10 ? * 6#3" 每月的第三個星期五上午10:15觸發
上面這個是quartz的語法 定時單位
-->
<property name="cronExpression">
<value>0 0/5 * * * ?</value> //定時的語法
</property>
</bean>
<bean id="sfb" class="org.springframework.scheling.quartz.SchelerFactoryBean">
<property name="triggers">
<list>
<ref local="timeTrigger"/>
</list>
</property>
</bean>
</beans>
//下面這個類就是我在XML中引入的類
package net.timed;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class MainTask {
public void execute() throws IOException
{
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("do my job"+dateFormat.format(new Date()));
Runtime.getRuntime().exec("cmd /c start E:/mbl/BusinessOffice/MoneDB/bin/bakup.bat");
}
}
然後在web.xml中把這個TimeConfig.xml添加進去作為監聽
系統啟動的時候自動就監聽這個事件
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<context-param>
<param-name>
contextConfigLocation
</param-name>
<param-value>
/WEB-INF/TimerConfig.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
這個是quartz spring的定時機制 請仔細的看看 如果可以請給分哦