gpt4 book ai didi

java - Java线程中的定时器

转载 作者:太空狗 更新时间:2023-10-29 22:33:19 25 4
gpt4 key购买 nike

我有一个线程负责做一些处理。我想让这些处理每 3 秒完成一次。我使用了下面的代码,但是当线程启动时,没有任何反应。我假设当我为我的计时器定义一个任务时,它会在时间间隔内自动执行 ScheduledTask 但它什么都不做。我错过了什么?

class temperatureUp extends Thread 
{
@Override
public void run()
{
TimerTask increaseTemperature = new TimerTask(){

public void run() {
try {
//do the processing
} catch (InterruptedException ex) {}
}
};

Timer increaserTimer = new Timer("MyTimer");
increaserTimer.schedule(increaseTemperature, 3000);

}
};

最佳答案

您的代码片段中存在一些错误:

  • 您扩展了 Thread 类,这不是很好的做法
  • 您在线程 中有一个计时器?这没有意义,因为 Timer 在其自己的 Thread 上运行。

您应该(在必要时/在必要的地方)实现一个Runnable 参见here举一个简短的例子,但是我看不到您提供的代码段中同时需要 ThreadTimer

请参阅下面的工作 Timer 示例,它会在每次调用时(每 3 秒)将计数器简单地递增 1:

import java.util.Timer;
import java.util.TimerTask;

public class Test {

static int counter = 0;

public static void main(String[] args) {

TimerTask timerTask = new TimerTask() {

@Override
public void run() {
System.out.println("TimerTask executing counter is: " + counter);
counter++;//increments the counter
}
};

Timer timer = new Timer("MyTimer");//create a new Timer

timer.scheduleAtFixedRate(timerTask, 30, 3000);//this line starts the timer at the same time its executed
}
}

附录:

我做了一个将 Thread 合并到组合中的简短示例。所以现在 TimerTask 只会每 3 秒将 counter 递增 1,而 Thread 将显示 counter 的值每次检查计数器时 hibernate 1 秒(它将在 counter==3 之后终止自身和计时器):

import java.util.Timer;
import java.util.TimerTask;

public class Test {

static int counter = 0;
static Timer timer;

public static void main(String[] args) {

//create timer task to increment counter
TimerTask timerTask = new TimerTask() {

@Override
public void run() {
// System.out.println("TimerTask executing counter is: " + counter);
counter++;
}
};

//create thread to print counter value
Thread t = new Thread(new Runnable() {

@Override
public void run() {
while (true) {
try {
System.out.println("Thread reading counter is: " + counter);
if (counter == 3) {
System.out.println("Counter has reached 3 now will terminate");
timer.cancel();//end the timer
break;//end this loop
}
Thread.sleep(1000);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
});

timer = new Timer("MyTimer");//create a new timer
timer.scheduleAtFixedRate(timerTask, 30, 3000);//start timer in 30ms to increment counter

t.start();//start thread to display counter
}
}

关于java - Java线程中的定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11707066/

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