java线程中的task_Java线程(四):Timer和TimerTask
Timer和TimerTask可以做為實現線程的第三種方式,前兩中方式分別是繼承自Thread類和實現Runnable接口。
Timer是一種線程設施,用于安排以后在后臺線程中執(zhí)行的任務。可安排任務執(zhí)行一次,或者定期重復執(zhí)行,可以看成一個定時器,可以調度TimerTask。TimerTask是一個抽象類,實現了Runnable接口,所以具備了多線程的能力。
一個Timer可以調度任意多個TimerTask,它會將TimerTask存儲在一個隊列中,順序調度,如果想兩個TimerTask并發(fā)執(zhí)行,則需要創(chuàng)建兩個Timer。下面來看一個簡單的例子:
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);// 兩秒后啟動任務
}
}? ? ? ? schedule是Timer調度任務的方法,Timer重構了四個schedule方法,具體可以查看JDK API。
看一個稍復雜的例子,假設有這樣一種需求,實現一個連環(huán)炸彈,2秒后爆炸一次,3秒后爆炸一次,如此循環(huán)下去,這就需要創(chuàng)建兩個任務,互相調度,代碼如下:
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();
}
}
}
}
總結
以上是生活随笔為你收集整理的java线程中的task_Java线程(四):Timer和TimerTask的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于解决tomcat的一个错误
- 下一篇: input变下划线的输入框CSS