我想我并不完全理解计时器和TimerTask在Java和Android中是如何工作的。现在,我定义了一些定期任务,在一个计时器内安排。
我想知道我应该使用单个计时器来安排任务,还是为每个任务使用不同的计时器实例?计时器有自己的线程吗?是否在新线程中执行计划的任务?背景中发生了什么?
这些方法有什么不同?
方法1的示例代码:
private void initTasks() {
TimerTask task1 = new MyTimerTask1();
TimerTask task2 = new MyTimerTask2();
TimerTask task3 = new MyTimerTask3();
Timer timer = new Timer();
timer.schedule(task1, 0, TASK1_PERIOD);
timer.schedule(task2, 0, TASK2_PERIOD);
timer.schedule(task3, 0, TASK3_PERIOD);
}
class MyTimerTask1 extends TimerTask {
public void run() {
//do task1
}
}
class MyTimerTask2 extends TimerTask {
public void run() {
//do task2
}
}
class MyTimerTask3 extends TimerTask {
public void run() {
//do task3
}
}
方法2的示例代码:
private void initTasks() {
MyTimerTask1 task1 = new MyTimerTask1();
MyTimerTask2 task2 = new MyTimerTask2();
MyTimerTask3 task3 = new MyTimerTask3();
task1.start();
task2.start();
task3.start();
}
class MyTimerTask1 extends TimerTask {
private Timer timer;
public void run() {
//do task1
}
public void start() {
timer = new Timer();
timer.schedule(this, 0, TASK1_PERIOD);
}
}
class MyTimerTask2 extends TimerTask {
private Timer timer;
public void run() {
//do task2
}
public void start() {
timer = new Timer();
timer.schedule(this, 0, TASK2_PERIOD);
}
}
class MyTimerTask3 extends TimerTask {
private Timer timer;
public void run() {
//do task3
}
public void start() {
timer = new Timer();
timer.schedule(this, 0, TASK3_PERIOD);
}
}
第一种解决方案创建一个计时器对象;第二种是多个计时器。正如javadoc清楚地解释的那样,每个计时器都有自己的线程:
与每个计时器对象对应的是一个后台线程,用于按顺序执行计时器的所有任务。计时器任务应该很快完成。如果计时器任务花费过多时间来完成,它会“占用”计时器的任务执行线程。这反过来会延迟后续任务的执行,当(如果)有问题的任务最终完成时,这些任务可能会“聚集”并快速连续执行。
因此:第二种解决方案保证三个任务有三个线程。换句话说:您使用了更多的资源,但这样做的结果是,您可以确保不同的任务不会相互“阻塞”(当两个任务需要在同一个线程上运行时,那么:它只是一个线程;它不能并行执行两个任务!)
但除此之外:当我阅读了一个简单的搜索“java timer android”显示的许多答案时,真正的答案似乎是:在android上,你应该更喜欢使用处理程序而不是计时器对象。
本文向大家介绍Java中Spring使用Quartz任务调度定时器,包括了Java中Spring使用Quartz任务调度定时器的使用技巧和注意事项,需要的朋友参考一下 Quartz 任务调度是什么 Quartz 是 OpenSymphony 开源组织在 Job scheduling 领域又一个开源项目,它可以与 J2EE 与 J2SE 应用程序相结合也可以单独使用。Quartz 是一个完全由 Ja
我正在开发一个应用程序,它需要每x分钟上线一次,检查一些新数据。为了防止大量的网络和数据使用,任务应该以固定的速率运行,但是这种解决方案的最佳方法是什么?< code >处理程序或< code >计时器对象?
但是我不能在一个计时器中处理不同的“计时器任务”。我试图将计时器任务对象添加到构造函数中,但是当我将新的计时器任务(RemindTask1)对象作为参数(内部类的实例)传递时,出现编译错误。 以下是它如何处理一项任务: 但是我完全被多个任务应该如何创建然后运行所困扰。 但是这不起作用,我不知道出了什么问题。当我将新的RemindTask2()作为参数传递时,我遇到了编译错误。
Running Events With a Delay # sched_basic.py import sched import time scheduler = sched.scheduler(time.time, time.sleep) def print_event(name, start): now = time.time() elapsed = int(now -
我已经使用java创建了特定于时区的计划任务事件。我的密码是贝娄。 但是问题是当调用这个方法时,它会很快运行这个任务。我需要每天12点在亚洲/科伦坡时区运行这项工作。那要怎么做?
有时我会得到这样的输出,即上一个任务结束和下一个任务开始之间的时间小于,大约为。 它是由于某种粒度而正常还是为什么会发生?这个delta值有什么保证吗?