gpt4 book ai didi

java - 在 Android 中使用单个计时器与多个计时器来调度 TimerTasks

转载 作者:行者123 更新时间:2023-12-02 13:24:56 25 4
gpt4 key购买 nike

我认为我不完全理解 TimerTimerTask 在 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清楚地解释了,每个计时器都有自己的线程:

Corresponding to each Timer object is a single background thread that is used to execute all of the timer's tasks, sequentially. Timer tasks should complete quickly. If a timer task takes excessive time to complete, it "hogs" the timer's task execution thread. This can, in turn, delay the execution of subsequent tasks, which may "bunch up" and execute in rapid succession when (and if) the offending task finally completes.

因此:第二个解决方案保证您的三个任务有三个线程。换句话说:您使用了更多资源,但这样做的结果是,您可以确保不同的任务不会互相“阻塞”(当两个任务需要在同一个线程上运行时,好吧:这只是一个线程;它不能并行执行两个任务!)

但除此之外:当我阅读简单搜索“java time android”所显示的许多答案时,真正的答案似乎是:在Android上,你应该更喜欢使用 Handler而不是 Timer 对象。

关于java - 在 Android 中使用单个计时器与多个计时器来调度 TimerTasks,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43674129/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com