1,Timer
Timer的实质上就是一个多线程,从它的类中可以看出:
Java代码
1. private TimerThread thread = new TimerThread(queue);
它适用于与时间相关的一些操作,多长时间后运行某个动作,间隔运行某个动作。如:时钟程序我们要每一秒中就刷新一下我们的指针,如,模拟心脏的跳动,Timer都是不错的选择。
2,Timer的线程设置成后台线程
Java代码
1. public class Time {
2. private final Timer timer = new Timer(true);
3.
4. public void start() {
5. timer.schedule(new TimerTask() {
6. public void run() {
7. System.out.println("Your egg is ready!");
8. }
9. }, 1000, 1000);
10. }
11.
12. public static void main(String[] args) {
13. Time eggTimer = new Time();
14. eggTimer.start();
15. try {
16. Thread.sleep(5000);
17. } catch (InterruptedException e) {
18. e.printStackTrace();
19. }
20. }
21. }
public class Time {
private final Timer timer = new Timer(true);
public void start() {
timer.schedule(new TimerTask() {
public void run() {
System.out.println("Your egg is ready!");
}
}, 1000, 1000);
}
public static void main(String[] args) {
Time eggTimer = new Time();
eggTimer.start();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
实现了在1秒钟后,每隔一秒钟后运行一次TimerTask。这个Timer设置成的后台线程,在主线程退出后自动退出,一般的我觉得Timer 都设置成后台的比较好,前段时间我就发现我写的程序退出了,怎么还有javaw.exe在任务管理器中没有退出啊,还发现我的程序运行了很多次后,在任务管理器中的javaw.exe越来越多,我的机器也就越来越慢了,噢,肯定我的程序,还没有完全推出,结果就找到了一个Timer没有退出,后来我就把我程序的所有的Timer都改后台了。Timer一般都是完成某个任务,如果没有了前台线程,它本来就没有存在的意义了,我程序中是利用的Timer去检测文件的改动,然后通知前台程序文件变了。
3,Timer运行一段时间,被cancel
Java代码
1. public class Time {
2. private final static Timer timer = new Timer();
3.
4. public void start() {
5. timer.schedule(new TimerTask() {
6. public void run() {
7. System.out.println("Your egg is ready!");
8. }
9. }, 1000, 1000);
10. }
11.
12. public static void main(String[] args) {
13. Time eggTimer = new Time();
14. eggTimer.start();
15. try {
16. Thread.sleep(5000);
17. timer.cancel();
18. } catch (InterruptedException e) {
19. e.printStackTrace();
20. }
21. }
22. }
public class Time {
private final static Timer timer = new Timer();
public void start() {
timer.schedule(new TimerTask() {
public void run() {
System.out.println("Your egg is ready!");
}
}, 1000, 1000);
}
public static void main(String[] args) {
Time eggTimer = new Time();
eggTimer.start();
try {
Thread.sleep(5000);
timer.cancel();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
4,Timer运行5次后,被cancel
Java代码
1. public class Time {
2. private final static Timer timer = new Timer();
3.
4. public void start() {
5. timer.schedule(new TimerTask() {
6. private int count = 5;
7. public void run() {
8. System.out.println("Your egg is ready!");
9. if(count--==0)
10. timer.cancel();
11. }
12. }, 1000, 1000);
13. }
14.
15. public static void main(String[] args) {
16. Time eggTimer = new Time();
17. eggTimer.start();
18. }
19. }
转自:http://xmind.javaeye.com/blog/718699