給一個(gè)我自己的絲路:
為湖北等地區(qū)用戶提供了全套網(wǎng)頁(yè)設(shè)計(jì)制作服務(wù),及湖北網(wǎng)站建設(shè)行業(yè)解決方案。主營(yíng)業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、湖北網(wǎng)站設(shè)計(jì),以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠(chéng)的服務(wù)。我們深信只要達(dá)到每一位用戶的要求,就會(huì)得到認(rèn)可,從而選擇與我們長(zhǎng)期合作。這樣,我們也可以走得更遠(yuǎn)!
用戶開(kāi)始操作時(shí),session記錄狀態(tài)。并開(kāi)啟定時(shí)器,延遲時(shí)間就是你允許用戶操作的時(shí)間。定時(shí)器執(zhí)行的代碼,就是用戶超時(shí)后,你要做的事情。
用戶在時(shí)間范圍內(nèi)操作完成,肯定會(huì)給服務(wù)器發(fā)送完成信息,此時(shí)移除定時(shí)器即可。
java 1.5以上的Future類可以執(zhí)行超時(shí)處理。
jdk1.5自帶的并發(fā)庫(kù)中Future類中重要方法包括get()和cancel(),get()獲取數(shù)據(jù)對(duì)象,如果數(shù)據(jù)沒(méi)有加載,就會(huì)阻塞直到取到數(shù)據(jù),而 cancel()是取消數(shù)據(jù)加載。另外一個(gè)get(timeout)操作,表示如果在timeout時(shí)間內(nèi)沒(méi)有取到就失敗返回,而不再阻塞。
代碼如下:
import?java.util.concurrent.Callable;
import?java.util.concurrent.ExecutionException;
import?java.util.concurrent.ExecutorService;
import?java.util.concurrent.Executors;
import?java.util.concurrent.TimeUnit;
import?com.sun.corba.se.impl.orbutil.closure.Future;
import?com.sun.corba.se.impl.orbutil.threadpool.TimeoutException;
public?class?ThreadTest?{??
public?static?void?main(String[]?args)?throws?InterruptedException,??
ExecutionException?{??
final?ExecutorService?exec?=?Executors.newFixedThreadPool(1);??
CallableString?call?=?new?CallableString()?{??
public?String?call()?throws?Exception?{??
//開(kāi)始執(zhí)行耗時(shí)操作??
Thread.sleep(1000?*?5);??
return?"線程執(zhí)行完成.";??
}??
};??
try?{??
FutureString?future?=?exec.submit(call);??
String?obj?=?future.get(1000?*?1,?TimeUnit.MILLISECONDS);?//任務(wù)處理超時(shí)時(shí)間設(shè)為?1?秒??
System.out.println("任務(wù)成功返回:"?+?obj);??
}?catch?(TimeoutException?ex)?{??
System.out.println("處理超時(shí)啦....");??
ex.printStackTrace();??
}?catch?(Exception?e)?{??
System.out.println("處理失敗.");??
e.printStackTrace();??
}??
//?關(guān)閉線程池??
exec.shutdown();??
}??
}
java定時(shí)任務(wù),每天定時(shí)執(zhí)行任務(wù)(JDK TimerTask)
標(biāo)簽: taskTasktimerTimer
2013-01-14 13:28 8747人閱讀 評(píng)論(0) 收藏 舉報(bào)
01 public class TimerManager {
02
03 //時(shí)間間隔
04 private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
05
06 public TimerManager() {
07 Calendar calendar = Calendar.getInstance();
08
09 /*** 定制每日2:00執(zhí)行方法 ***/
10
11 calendar.set(Calendar.HOUR_OF_DAY, 2);
12 calendar.set(Calendar.MINUTE, 0);
13 calendar.set(Calendar.SECOND, 0);
14
15 Date date=calendar.getTime(); //第一次執(zhí)行定時(shí)任務(wù)的時(shí)間
16
17 //如果第一次執(zhí)行定時(shí)任務(wù)的時(shí)間 小于 當(dāng)前的時(shí)間
18 //此時(shí)要在 第一次執(zhí)行定時(shí)任務(wù)的時(shí)間 加一天,以便此任務(wù)在下個(gè)時(shí)間點(diǎn)執(zhí)行。如果不加一天,任務(wù)會(huì)立即執(zhí)行。
19 if (date.before(new Date())) {
20 date = this.addDay(date, 1);
21 }
22
23 Timer timer = new Timer();
24
25 NFDFlightDataTimerTask task = new NFDFlightDataTimerTask();
26 //安排指定的任務(wù)在指定的時(shí)間開(kāi)始進(jìn)行重復(fù)的固定延遲執(zhí)行。
27 timer.schedule(task,date,PERIOD_DAY);
28 }
29
30 // 增加或減少天數(shù)
31 public Date addDay(Date date, int num) {
32 Calendar startDT = Calendar.getInstance();
33 startDT.setTime(date);
34 startDT.add(Calendar.DAY_OF_MONTH, num);
35 return startDT.getTime();
36 }
37
38 }
在 TimerManager 這個(gè)類里面,大家一定要注意 時(shí)間點(diǎn)的問(wèn)題。如果你設(shè)定在凌晨2點(diǎn)執(zhí)行任務(wù)。但你是在2點(diǎn)以后
發(fā)布的程序或是重啟過(guò)服務(wù),那這樣的情況下,任務(wù)會(huì)立即執(zhí)行,而不是等到第二天的凌晨2點(diǎn)執(zhí)行。為了,避免這種情況
發(fā)生,只能判斷一下,如果發(fā)布或重啟服務(wù)的時(shí)間晚于定時(shí)執(zhí)行任務(wù)的時(shí)間,就在此基礎(chǔ)上加一天。
01 public class NFDFlightDataTimerTask extends TimerTask {
02
03 private static Logger log = Logger.getLogger(NFDFlightDataTimerTask.class);
04
05 @Override
06 public void run() {
07 try {
08 //在這里寫你要執(zhí)行的內(nèi)容
09
10 } catch (Exception e) {
11 log.info("-------------解析信息發(fā)生異常--------------");
12 }
13 }
14 }
15
16 public class NFDFlightDataTaskListener implements ServletContextListener {
17
18 public void contextInitialized(ServletContextEvent event) {
19 new TimerManager();
20 }
21
22 public void contextDestroyed(ServletContextEvent event) {
23 }
24
25 }
然后要在web.xml里面配置監(jiān)聽(tīng)器
1 listener
2 listener-class
3 com.listener.NFDFlightDataTaskListener
4 /listener-class
5 /listener
檢測(cè)一個(gè)JAVA程序的運(yùn)行時(shí)間方法:
1
2
3
4
long startTime = System.currentTimeMillis();//獲取當(dāng)前時(shí)間
//doSomeThing(); //要運(yùn)行的java程序
long endTime = System.currentTimeMillis();
System.out.println("程序運(yùn)行時(shí)間:"+(endTime-startTime)+"ms");
分享題目:監(jiān)控java代碼執(zhí)行時(shí)間 監(jiān)控java代碼執(zhí)行時(shí)間怎么看
網(wǎng)站鏈接:http://vcdvsql.cn/article40/ddihdho.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、商城網(wǎng)站、自適應(yīng)網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)站制作、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)