import java.util.Timer;
創(chuàng)新互聯(lián)建站專注于阿勒泰企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站,商城建設(shè)。阿勒泰網(wǎng)站建設(shè)公司,為阿勒泰等地區(qū)提供建站服務(wù)。全流程按需設(shè)計(jì),專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務(wù)
import java.util.TimerTask;
public class Test extends TimerTask {
public static void main(String[] args) {
Timer timer = new Timer();
Test t=new Test();
//程序運(yùn)行后立刻執(zhí)行任務(wù),每隔1000ms執(zhí)行一次
timer.schedule(t, 0, 1000);
}
@Override
public void run() {
System.out.println("在此處調(diào)用插入數(shù)據(jù)庫(kù)的方法");
}
}
我是讓它每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();
}
import?java.util.Random;
import?java.util.Timer;
import?java.util.TimerTask;
public?class?MainEntry?{
private?int?a;
public?void?setVal(){
Timer?timer?=?new?Timer();
//每隔一秒生成一個(gè)[1,100)內(nèi)的隨機(jī)整數(shù),賦給成員a
timer.schedule(new?TimerTask()?{?
@Override
public?void?run()?{
Random?rand?=?new?Random();
setA(rand.nextInt(100));
}
},?1000);
}
public?void?setA(int?a)?{
this.a?=?a;
}
public?int?getA()?{
return?a;
}
public?static?void?main(String[]?args)?{
MainEntry?me?=?new?MainEntry();
me.setVal();
}
}
1、scheduleUpdate
加入當(dāng)前節(jié)點(diǎn)后,程序會(huì)每幀都會(huì)自動(dòng)執(zhí)行一次默認(rèn)的Update函數(shù)。(注:一定是Update函數(shù)哦,若想調(diào)用其他自己命名的函數(shù)則使用schedule)
看例子,走起。
首先在HelloWord類的頭文件中聲明Update函數(shù):
[cpp] view plain copy print?
void update(float dt); //注意參數(shù)類型
然后在HelloWorld類源文件中實(shí)現(xiàn)函數(shù)Update:
[cpp] view plain copy print?
void HelloWorld::update(float dt)
{
CCLOG("baibai");
}
現(xiàn)在我們可以調(diào)用了,在需要他不斷執(zhí)行的地方加入調(diào)用的代碼就ok:
[cpp] view plain copy print?
this-scheduleUpdate(); //this是當(dāng)前節(jié)點(diǎn),如layer,所以可以省略啦。
運(yùn)行之后你將會(huì)看到不斷有baibai被打印出來(lái)
2、scheduleUpdate
可以沒(méi)隔幾秒執(zhí)行某個(gè)自定義的函數(shù),來(lái)看代碼:
首先還是在HelloWorld中聲明所要執(zhí)行的函數(shù):
java定時(shí)器的使用(Timer)
1、在應(yīng)用開(kāi)發(fā)中,經(jīng)常需要一些周期性的操作,比如每5分鐘執(zhí)行某一操作等。
對(duì)于這樣的操作最方便、高效的實(shí)現(xiàn)方式就是使用java.util.Timer工具類。
private java.util.Timer timer;
timer = new Timer(true);
timer.schedule(
new java.util.TimerTask() { public void run()
{ //server.checkNewMail(); 要操作的方法} }, 0, 5*60*1000);
第一個(gè)參數(shù)是要操作的方法,第二個(gè)參數(shù)是要設(shè)定延遲的時(shí)間,第三個(gè)參
數(shù)是周期的設(shè)定,每隔多長(zhǎng)時(shí)間執(zhí)行該操作。
使用這幾行代碼之后,Timer本身會(huì)每隔5分鐘調(diào)用一遍
server.checkNewMail()方法,不需要自己?jiǎn)?dòng)線程。Timer本身也是多線程同
步的,多個(gè)線程可以共用一個(gè)Timer,不需要外部的同步代碼。
2、
(1)Timer.schedule(TimerTask task,Date time)安排在制定的時(shí)間執(zhí)行指定的
任務(wù)。
(2)Timer.schedule(TimerTask task,Date firstTime ,long period)安排指定
的任務(wù)在指定的時(shí)間開(kāi)始進(jìn)行重復(fù)的固定延遲執(zhí)行.
(3)Timer.schedule(TimerTask task,long delay)安排在指定延遲后執(zhí)行指定的
任務(wù).
(4)Timer.schedule(TimerTask task,long delay,long period)安排指定的任務(wù)
從指定的延遲后開(kāi)始進(jìn)行重復(fù)的固定延遲執(zhí)行.
(5)Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
安排指定的任務(wù)在指定的時(shí)間開(kāi)始進(jìn)行重復(fù)的固定速率執(zhí)行.
(6)Timer.scheduleAtFixedRate(TimerTask task,long delay,long period)安
排指定的任務(wù)在指定的延遲后開(kāi)始進(jìn)行重復(fù)的固定速率執(zhí)行.
用Java Timer API 進(jìn)行時(shí)間調(diào)度開(kāi)發(fā)的相關(guān)注意點(diǎn)
java.util這個(gè)包中可以找到Timer和TimerTask這兩個(gè)類。Timer直接從Object
繼承,它相當(dāng)于一個(gè)計(jì)時(shí)器,能夠用它來(lái)指定某個(gè)時(shí)間來(lái)執(zhí)行一項(xiàng)任務(wù),或者
每隔一定時(shí)間間隔反復(fù)執(zhí)行同一個(gè)任務(wù)。創(chuàng)建一個(gè)Timer后,就會(huì)生成一個(gè)線程
在背后運(yùn)行,來(lái)控制任務(wù)的執(zhí)行。而TimerTask就是用來(lái)實(shí)現(xiàn)某項(xiàng)任務(wù)的類,
它實(shí)現(xiàn)了Runnable接口,因此相當(dāng)于一個(gè)線程。
setTimeout()函數(shù)
JavaScript函數(shù)是單線程執(zhí)行的,假如說(shuō)到了setTimeout函數(shù)設(shè)置的時(shí)間了,它就把代碼插入執(zhí)行隊(duì)列,如果這個(gè)隊(duì)列沒(méi)有執(zhí)行的代碼,那就立即執(zhí)行定時(shí)器代碼,如果有正在執(zhí)行的代碼那么就要等到代碼執(zhí)行完畢后才執(zhí)行定時(shí)器代碼。這就意味并不是在定時(shí)器時(shí)間到了就立即執(zhí)行代碼而是把代碼添加到執(zhí)行隊(duì)列。
setInterval()函數(shù)
假如設(shè)置的時(shí)間間隔為100ms,但是執(zhí)行定時(shí)器代碼需要300毫秒,這樣在程序執(zhí)行到100毫秒的時(shí)候,定時(shí)器到時(shí)了,這時(shí)在執(zhí)行隊(duì)列中添加另外一個(gè)定時(shí)器代碼副本。當(dāng)?shù)谝粋€(gè)定時(shí)器代碼運(yùn)行到200毫秒時(shí),定時(shí)器又到時(shí),但是第一個(gè)定時(shí)器代碼正在執(zhí)行而且執(zhí)行隊(duì)列已經(jīng)有一個(gè)定時(shí)器副本了,所以這次的定時(shí)器代碼不會(huì)被添加到執(zhí)行隊(duì)列中。這樣當(dāng)?shù)谝粋€(gè)定時(shí)器代碼執(zhí)行結(jié)束后,第二個(gè)定時(shí)器代碼就會(huì)立即執(zhí)行,沒(méi)有達(dá)到間隔的效果??梢杂靡韵麓a來(lái)避免這種結(jié)果(來(lái)自javascript高級(jí)編程第二版)
setTimeout(function()
{
//處理代碼
setTimeout(arguments.callee,interval);
},interval);
這個(gè)模式下,每次執(zhí)行定時(shí)器都會(huì)創(chuàng)建一個(gè)新的定時(shí)器。第二個(gè)setTimeout通過(guò)調(diào)用arguments.callee來(lái)獲取當(dāng)前函數(shù)的引用,并設(shè)置另一個(gè)定時(shí)器。這就確保了第一個(gè)定時(shí)器代碼執(zhí)行完畢前不會(huì)向隊(duì)列插入新的定時(shí)器代碼,也不會(huì)有缺失時(shí)間間隔。
當(dāng)前題目:java定時(shí)器代碼,定時(shí)器 Java
網(wǎng)站路徑:http://m.rwnh.cn/article8/phjjip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、小程序開(kāi)發(fā)、軟件開(kāi)發(fā)、網(wǎng)站策劃、、移動(dòng)網(wǎng)站建設(shè)
聲明:本網(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)