中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

java中定時(shí)器實(shí)例代碼 java中定時(shí)器實(shí)例代碼是什么

Java定時(shí)器

好多朋友用過Windows的任務(wù)計(jì)劃 也有不少程序迷自己曾寫過時(shí)鐘報(bào)警 系統(tǒng)自動(dòng)關(guān)機(jī)等趣味程序 可卻很少有朋友在Web工程中實(shí)現(xiàn)過類似功能

在陽泉等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作定制網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),成都營銷網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè)公司,陽泉網(wǎng)站建設(shè)費(fèi)用合理。

當(dāng)Web工程啟動(dòng)時(shí) 定時(shí)器能自動(dòng)開始計(jì)時(shí) 在整個(gè)Web工程的生命期里 定時(shí)器能在每晚深夜觸發(fā)一次任務(wù) 因此定時(shí)器的存放位置也值得考查 不能簡單的存在于單個(gè)Servlet或JavaBean中 必須能讓定時(shí)器宿主的存活期為整個(gè)Web工程生命期 在工程啟動(dòng)時(shí)能自動(dòng)加載運(yùn)行 結(jié)合這兩點(diǎn) 跟 Servlet上下文有關(guān)的偵聽器就最合適不過了 通過在工程的配置文件中加以合理配置 會在工程啟動(dòng)時(shí)自動(dòng)運(yùn)行 并在整個(gè)工程生命期中處于監(jiān)聽狀態(tài)

下面就Servlet偵聽器結(jié)合Java定時(shí)器來講述整個(gè)實(shí)現(xiàn)過程 要運(yùn)用Servlet偵聽器需要實(shí)現(xiàn) javax servlet ServletContextListener接口 同時(shí)實(shí)現(xiàn)它的contextInitialized (ServletContextEvent event)和contextDestroyed(ServletContextEvent event)兩個(gè)接口函數(shù) 考慮定時(shí)器有個(gè)建立和銷毀的過程 看了前面兩個(gè)接口函數(shù) 就不容置疑的把建立的過程置入 contextInitialized 把銷毀的過程置入contextDestroyed了

我把ServletContextListener的實(shí)現(xiàn)類取名為ContextListener 在其內(nèi)添加一個(gè)定時(shí)器 示例代碼如下所示

import java util Timer;

import javax servlet ServletContextEvent;

import javax servlet ServletContextListener;

import javax servlet ServletException;

import javax servlet ServletRequest;

import javax servlet ServletResponse;

import javax servlet HttpServlet;

public class ContextListener

extends HttpServlet

implements ServletContextListener {

public ContextListener() {

}

private java util Timer timer = null;

public void contextInitialized(ServletContextEvent event) {

timer = new java util Timer(true);

event getServletContext() log( 定時(shí)器已啟動(dòng) );

timer schedule(new MyTask(event getServletContext()) * * );

event getServletContext() log( 已經(jīng)添加任務(wù)調(diào)度表 );

}

public void contextDestroyed(ServletContextEvent event) {

timer cancel();

event getServletContext() log( 定時(shí)器銷毀 );

}

}

以上代碼中 timer schedule(new MyTask(event getServletContext()) * * )這一行為定時(shí)器調(diào)度語句 其中MyTask是自定義需要被調(diào)度的執(zhí)行任務(wù)(在我的財(cái)政數(shù)據(jù)中心項(xiàng)目中就是報(bào)表計(jì)算引擎入口) 從 java util TimerTask繼承 下面會重點(diǎn)講述 第三個(gè)參數(shù)表示每小時(shí)(即 * * 毫秒)被觸發(fā)一次 中間參數(shù) 表示無延遲 其它代碼相當(dāng)簡單 不再詳細(xì)說明

下面介紹MyTask的實(shí)現(xiàn) 上面的代碼中看到了在構(gòu)造MyTask時(shí) 傳入了javax servlet ServletContext類型參數(shù) 是為記錄Servlet日志方便而傳入 因此需要重載MyTask的構(gòu)造函數(shù)(其父類java util TimerTask原構(gòu)造函數(shù)是沒有參數(shù)的) 在timer schedule()的調(diào)度中 設(shè)置了每小時(shí)調(diào)度一次 因此如果想實(shí)現(xiàn)調(diào)度任務(wù)每 小時(shí)被執(zhí)行一次 還需要判斷一下時(shí)鐘點(diǎn) 以常量C_SCHEDULE_HOUR表示(晚上 點(diǎn) 也即 點(diǎn)) 同時(shí)為防止 小時(shí)執(zhí)行下來 任務(wù)還未執(zhí)行完(當(dāng)然 一般任務(wù)是沒有這么長的) 避免第二次又被調(diào)度以引起執(zhí)行沖突 設(shè)置了當(dāng)前是否正在執(zhí)行的狀態(tài)標(biāo)志isRunning 示例代碼如下所示

import java util *;

import javax servlet ServletContextEvent;

import javax servlet ServletContextListener;

import javax servlet ServletException;

import javax servlet ServletRequest;

import javax servlet ServletResponse;

import javax servlet HttpServlet;

import javax servlet *;

public class MyTask extends TimerTask {

private static final int C_SCHEDULE_HOUR = ;

private static boolean isRunning = false;

private ServletContext context = null;

public MyTask() {

}

public MyTask(ServletContext context) {

ntext = context;

}

public void run() {

Calendar cal = Calendar getInstance();

if (!isRunning) {

if (C_SCHEDULE_HOUR == cal get(Calendar HOUR_OF_DAY)) {

isRunning = true;

context log( 開始執(zhí)行指定任務(wù) );

//TODO 添加自定義的詳細(xì)任務(wù) 以下只是示例

//系統(tǒng)定時(shí)接收郵件

Email email=new Email();

email recieve();

isRunning = false;

context log( 指定任務(wù)執(zhí)行結(jié)束 );

}

}

else {

context log( 上一次任務(wù)執(zhí)行還未結(jié)束 );

}

}

}

到這兒 ServletContextListener和MyTask的代碼都已完整了 最后一步就是把ServletContextListener部署到您的Web工程中去 在您工程的web xml配置文件中加入如下三行

listener

listener class test ContextListener/listener class

/listener

lishixinzhi/Article/program/Java/hx/201311/26421

求一個(gè)簡單的Java定時(shí)器源代碼

我是讓它每10毫秒掃描一下。

Calendar ca=null;

Calendar ca1=null;

Timer timer=new Timer();

static Connection con=null;

public void chu(){

ca=Calendar.getInstance();

ca1=(Calendar)ca.clone();

ca1.add(Calendar.SECOND, 20);

}

public void Time(){

float s=ca1.get(Calendar.SECOND)-ca.get(Calendar.SECOND)+(ca1.get(Calendar.MILLISECOND)-ca.get(Calendar.MILLISECOND))/1000f;

if(con==null){

System.out.println("耗時(shí)"+String.valueOf(s)+"秒");

if(ca.after(ca1)){

System.out.println("取不到連接");

timer.cancel();

return ;

}

}else{

System.out.println("耗時(shí)"+String.valueOf(s)+"秒");

}

ca.add(Calendar.MILLISECOND, 10);

timer.schedule(

new TimerTask() {

public void run() {

System.out.println("時(shí)間在溜走。。。。");

Time();

}

}, ca.getTime());

}

void getcon(){

Connection con=null;//獲取Connection

chu();

Time();

}

在Java中如何設(shè)置一個(gè)定時(shí)任務(wù)的代碼應(yīng)該怎么寫?

指定定時(shí)任務(wù)的代碼如下:

public void schedule(TimerTask task,Date time)

比如,我們希望定時(shí)任務(wù)2006年7月2日0時(shí)0分執(zhí)行,只要給第二個(gè)參數(shù)傳一個(gè)時(shí)間設(shè)置為2006年7月2日0時(shí)0分的Date對象就可以了.

有一種情況是,可能我們的程序啟動(dòng)的時(shí)候,已經(jīng)是2006年7月3日了,這樣的話,程序一啟動(dòng),定時(shí)任務(wù)就開始執(zhí)行了.

schedule最后一個(gè)重載的方法是

public void schedule(TimerTask task,Date firstTime,long period)

既然號稱是定時(shí)任務(wù),我們肯定希望由我們來指定任務(wù)指定的時(shí)間,顯然上面的方法就不中用了,因?yàn)槲覀儾恢莱绦蚴裁磿r(shí)間開始運(yùn)行,就沒辦法確定需要延時(shí)多少.沒關(guān)系,schedule四個(gè)重載的方法還沒用完呢.用下面這個(gè)就OK了。

java定時(shí)器

import?java.io.IOException;

import?java.util.Timer;

public?class?TimerTest?{

public?static?void?main(String[]?args)?{

Timer?timer?=?new?Timer();

timer.schedule(new?MyTask(),?1000,?2000);//?在1秒后執(zhí)行此任務(wù),每次間隔2秒,如果傳遞一個(gè)Data參數(shù),就可以在某個(gè)固定的時(shí)間執(zhí)行這個(gè)任務(wù).

while?(true)?{//?這個(gè)是用來停止此任務(wù)的,否則就一直循環(huán)執(zhí)行此任務(wù)了

try?{

int?ch?=?System.in.read();

if?(ch?-?'c'?==?0)?{

timer.cancel();//?使用這個(gè)方法退出任務(wù)

}

}?catch?(IOException?e)?{

//?TODO?Auto-generated?catch?block

e.printStackTrace();

}

}

}

static?class?MyTask?extends?java.util.TimerTask?{

@Override

public?void?run()?{

//?TODO?Auto-generated?method?stub

System.out.println("________");

}

}

}

這段代碼基本能滿足你需求了 你還有需求就在上面再套一層job 當(dāng)然如過太復(fù)雜了而且這種定時(shí)需求很多的話 建議用quartz框架 使用很簡單

網(wǎng)頁標(biāo)題:java中定時(shí)器實(shí)例代碼 java中定時(shí)器實(shí)例代碼是什么
網(wǎng)頁鏈接:http://m.rwnh.cn/article6/doociig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站排名網(wǎng)站設(shè)計(jì)公司、動(dòng)態(tài)網(wǎng)站、建站公司、小程序開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
紫金县| 民县| 镇原县| 都安| 京山县| 任丘市| 阿坝| 沐川县| 株洲市| 如东县| 徐汇区| 清水河县| 兴文县| 左权县| 安达市| 当阳市| 如皋市| 青川县| 布尔津县| 余干县| 兴化市| 肥城市| 巴林左旗| 靖江市| 乌审旗| 嘉荫县| 温泉县| 盐津县| 乐东| 聊城市| 达尔| 玉树县| 富裕县| 闵行区| 栾城县| 河间市| 临高县| 山阴县| 绿春县| 莱芜市| 榆树市|