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ù)庫的方法");
}
}
我是讓它每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被打印出來
2、scheduleUpdate
可以沒隔幾秒執(zhí)行某個(gè)自定義的函數(shù),來看代碼:
首先還是在HelloWorld中聲明所要執(zhí)行的函數(shù):
java定時(shí)器的使用(Timer)
1、在應(yīng)用開發(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í)間開始進(jìn)行重復(fù)的固定延遲執(zhí)行.
(3)Timer.schedule(TimerTask task,long delay)安排在指定延遲后執(zhí)行指定的
任務(wù).
(4)Timer.schedule(TimerTask task,long delay,long period)安排指定的任務(wù)
從指定的延遲后開始進(jìn)行重復(fù)的固定延遲執(zhí)行.
(5)Timer.scheduleAtFixedRate(TimerTask task,Date firstTime,long period)
安排指定的任務(wù)在指定的時(shí)間開始進(jìn)行重復(fù)的固定速率執(zhí)行.
(6)Timer.scheduleAtFixedRate(TimerTask task,long delay,long period)安
排指定的任務(wù)在指定的延遲后開始進(jìn)行重復(fù)的固定速率執(zhí)行.
用Java Timer API 進(jìn)行時(shí)間調(diào)度開發(fā)的相關(guān)注意點(diǎn)
java.util這個(gè)包中可以找到Timer和TimerTask這兩個(gè)類。Timer直接從Object
繼承,它相當(dāng)于一個(gè)計(jì)時(shí)器,能夠用它來指定某個(gè)時(shí)間來執(zhí)行一項(xiàng)任務(wù),或者
每隔一定時(shí)間間隔反復(fù)執(zhí)行同一個(gè)任務(wù)。創(chuàng)建一個(gè)Timer后,就會(huì)生成一個(gè)線程
在背后運(yùn)行,來控制任務(wù)的執(zhí)行。而TimerTask就是用來實(shí)現(xiàn)某項(xiàng)任務(wù)的類,
它實(shí)現(xiàn)了Runnable接口,因此相當(dāng)于一個(gè)線程。
setTimeout()函數(shù)
JavaScript函數(shù)是單線程執(zhí)行的,假如說到了setTimeout函數(shù)設(shè)置的時(shí)間了,它就把代碼插入執(zhí)行隊(duì)列,如果這個(gè)隊(duì)列沒有執(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í)行,沒有達(dá)到間隔的效果??梢杂靡韵麓a來避免這種結(jié)果(來自javascript高級(jí)編程第二版)
setTimeout(function()
{
//處理代碼
setTimeout(arguments.callee,interval);
},interval);
這個(gè)模式下,每次執(zhí)行定時(shí)器都會(huì)創(chuàng)建一個(gè)新的定時(shí)器。第二個(gè)setTimeout通過調(diào)用arguments.callee來獲取當(dāng)前函數(shù)的引用,并設(shè)置另一個(gè)定時(shí)器。這就確保了第一個(gè)定時(shí)器代碼執(zhí)行完畢前不會(huì)向隊(duì)列插入新的定時(shí)器代碼,也不會(huì)有缺失時(shí)間間隔。
當(dāng)前題目:java定時(shí)器代碼,定時(shí)器 Java
網(wǎng)站路徑:http://muchs.cn/article8/phjjip.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、小程序開發(fā)、軟件開發(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í)需注明來源: 創(chuàng)新互聯(lián)