java线程中的task_Java线程(四):Timer和TimerTask
Timer和TimerTask可以做為實(shí)現(xiàn)線程的第三種方式,前兩中方式分別是繼承自Thread類和實(shí)現(xiàn)Runnable接口。
Timer是一種線程設(shè)施,用于安排以后在后臺(tái)線程中執(zhí)行的任務(wù)。可安排任務(wù)執(zhí)行一次,或者定期重復(fù)執(zhí)行,可以看成一個(gè)定時(shí)器,可以調(diào)度TimerTask。TimerTask是一個(gè)抽象類,實(shí)現(xiàn)了Runnable接口,所以具備了多線程的能力。
一個(gè)Timer可以調(diào)度任意多個(gè)TimerTask,它會(huì)將TimerTask存儲(chǔ)在一個(gè)隊(duì)列中,順序調(diào)度,如果想兩個(gè)TimerTask并發(fā)執(zhí)行,則需要?jiǎng)?chuàng)建兩個(gè)Timer。下面來看一個(gè)簡單的例子:
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
static class MyTimerTask1 extends TimerTask {
public void run() {
System.out.println("爆炸!!!");
}
}
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new MyTimerTask1(), 2000);// 兩秒后啟動(dòng)任務(wù)
}
}? ? ? ? schedule是Timer調(diào)度任務(wù)的方法,Timer重構(gòu)了四個(gè)schedule方法,具體可以查看JDK API。
看一個(gè)稍復(fù)雜的例子,假設(shè)有這樣一種需求,實(shí)現(xiàn)一個(gè)連環(huán)炸彈,2秒后爆炸一次,3秒后爆炸一次,如此循環(huán)下去,這就需要?jiǎng)?chuàng)建兩個(gè)任務(wù),互相調(diào)度,代碼如下:
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTest {
static class MyTimerTask1 extends TimerTask {
public void run() {
System.out.println("爆炸!!!");
new Timer().schedule(new MyTimerTask2(), 2000);
}
}
static class MyTimerTask2 extends TimerTask {
public void run() {
System.out.println("爆炸!!!");
new Timer().schedule(new MyTimerTask1(), 3000);
}
}
public static void main(String[] args) {
Timer timer = new Timer();
timer.schedule(new MyTimerTask2(), 2000);
while(true) {
System.out.println(new Date().getSeconds());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
總結(jié)
以上是生活随笔為你收集整理的java线程中的task_Java线程(四):Timer和TimerTask的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于解决tomcat的一个错误
- 下一篇: java程序课程总结_Java课程总结报