java定时器 并发_【java多线程与并发库】— 定时器的应用 | 学步园
定時(shí)器的應(yīng)用
1、? 定時(shí)器主要涉及到兩個(gè)類(java.util包中)
@-》public class Timer extendsObject
(一種工具,線程用其安排以后在后臺線程中執(zhí)行的任務(wù)。可安排任務(wù)執(zhí)行一次,或者定期重復(fù)執(zhí)行。 )
@-->public abstract class TimerTask extendsObjectimplementsRunnable
(由 Timer 安排為一次執(zhí)行或重復(fù)執(zhí)行的任務(wù)。)
2、Timer類的構(gòu)造方法:
構(gòu)造方法摘要
String?name)
創(chuàng)建一個(gè)新計(jì)時(shí)器,其相關(guān)的線程具有指定的名稱。
String?name, boolean?isDaemon)
創(chuàng)建一個(gè)新計(jì)時(shí)器,其相關(guān)的線程具有指定的名稱,并且可以指定作為守護(hù)程序運(yùn)行。
與每個(gè) Timer 對象相對應(yīng)的是單個(gè)后臺線程,用于順序地執(zhí)行所有計(jì)時(shí)器任務(wù)。
計(jì)時(shí)器任務(wù)應(yīng)該迅速完成。如果完成某個(gè)計(jì)時(shí)器任務(wù)的時(shí)間太長,那么它會“獨(dú)占”計(jì)時(shí)器的任務(wù)執(zhí)行線程。因此,這就可能延遲后續(xù)任務(wù)的執(zhí)行,而這些任務(wù)就可能“堆在一起”,并且在上述不友好的任務(wù)最終完成時(shí)才能夠被快速連續(xù)地執(zhí)行。
對 Timer 對象最后的引用完成后,并且 所有未處理的任務(wù)都已執(zhí)行完成后,計(jì)時(shí)器的任務(wù)執(zhí)行線程會正常終止(并且成為垃圾回收的對象)。但是這可能要很長時(shí)間后才發(fā)生。
默認(rèn)情況下,任務(wù)執(zhí)行線程并不作為守護(hù)線程 來運(yùn)行,所以它能夠阻止應(yīng)用程序終止。如果調(diào)用者想要快速終止計(jì)時(shí)器的任務(wù)執(zhí)行線程,那么調(diào)用者應(yīng)該調(diào)用計(jì)時(shí)器的
cancel 方法。
如果意外終止了計(jì)時(shí)器的任務(wù)執(zhí)行線程,例如調(diào)用了它的 stop 方法,那么所有以后對該計(jì)時(shí)器安排任務(wù)的嘗試都將導(dǎo)致
IllegalStateException,就好像調(diào)用了計(jì)時(shí)器的 cancel 方法一樣。
此類是線程安全的:多個(gè)線程可以共享單個(gè)
Timer 對象而無需進(jìn)行外部同步。
此類不 提供實(shí)時(shí)保證:它使用 Object.wait(long) 方法來安排任務(wù)。
實(shí)現(xiàn)注意事項(xiàng):此類可擴(kuò)展到大量同時(shí)安排的任務(wù)(存在數(shù)千個(gè)都沒有問題)。在內(nèi)部,它使用二進(jìn)制堆來表示其任務(wù)隊(duì)列,所以安排任務(wù)的開銷是 O(log n),其中 n 是同時(shí)安排的任務(wù)數(shù)。
實(shí)現(xiàn)注意事項(xiàng):所有構(gòu)造方法都啟動(dòng)計(jì)時(shí)器線程。
方法摘要
void
int
void
TimerTask?task,
Date?time)
安排在指定的時(shí)間執(zhí)行指定的任務(wù)。
void
TimerTask?task,
Date?firstTime, long?period)
安排指定的任務(wù)在指定的時(shí)間開始進(jìn)行重復(fù)的固定延遲執(zhí)行。
void
TimerTask?task, long?delay)
安排在指定延遲后執(zhí)行指定的任務(wù)。
void
TimerTask?task, long?delay, long?period)
安排指定的任務(wù)從指定的延遲后開始進(jìn)行重復(fù)的固定延遲執(zhí)行。
void
TimerTask?task,
Date?firstTime, long?period)
安排指定的任務(wù)在指定的時(shí)間開始進(jìn)行重復(fù)的固定速率執(zhí)行。
void
TimerTask?task, long?delay, long?period)
安排指定的任務(wù)在指定的延遲后開始進(jìn)行重復(fù)的固定速率執(zhí)行。
3、TimerTask類的構(gòu)造方法:
構(gòu)造方法摘要
protected
方法摘要
boolean
abstract ?void
long
實(shí)際 執(zhí)行的已安排 執(zhí)行時(shí)間。
實(shí)例1:
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//每隔10s打印"hello,honey!";
new Timer().schedule(new TimerTask(){
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("hello,honey!");
}
}, 10000);
while(true){
System.out.println(new Date().getSeconds());//打印當(dāng)前秒數(shù)
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
實(shí)例2:
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
//每隔10s打印"hello,honey!";
new Timer().schedule(new TimerTask(){
@Override
public void run() {
// TODO Auto-generated method stub
System.out.println("hello,honey!");
}
}, 10000,3000);//10s后打印,以后每隔3s打印一次
/*while(true){
System.out.println(new Date().getSeconds());//打印當(dāng)前秒數(shù)
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}*/
}
}
運(yùn)行結(jié)果:
總結(jié)
以上是生活随笔為你收集整理的java定时器 并发_【java多线程与并发库】— 定时器的应用 | 学步园的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java hibernate 多对多_j
- 下一篇: CTF-web基础