我正在尝试编写一个用于轮询的守护程序线程,该线程将每隔“3”秒轮询一次。我已经看过3种方法。我不确定要去哪一个?我想知道性能注意事项。哪一个可能是一致的,并且将占用较小的内存块?
new Timer().scheduleAtFixedRate(task, firstTime, period)
如果我归结为这样的代码:
public class Test {
static TimerTask timerTask = new TimerTask() {
@Override
public void run() {
// Do polling & Other business logic
System.out.println("=="+new Date());
}
};
public static void main(String[] args) {
ScheduledExecutorService scheduler = Executors
.newSingleThreadScheduledExecutor();
scheduler.scheduleWithFixedDelay(timerTask, 0, 3, TimeUnit.SECONDS);
}
}
为了
public class Test {
static Runnable task = new Runnable() {
@Override
public void run() {
while (true) {
try {
// Do polling & Other business logic
System.out.println("**"+new Date());
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
public static void main(String[] args) {
new Thread(task).start();
}
}
据我了解,与普通线程相比,线程池是一种繁重的对象。
我想知道使用这两种方法的利弊是什么?
提前致谢。
问候,
乙脑
最佳答案
如果端点由于某种原因变慢,继续以规则的间隔推送msg可能会在端点上导致溢出,因此,我认为您也应该考虑限制请求的发送,而不是盲目地按固定间隔推送请求。基于所有这些要求,我认为您可以选择ExecutorService,而不是TimerTask或低级线程方法。
ExecutorService的示例http://tutorials.jenkov.com/java-util-concurrent/executorservice.html
关于java - Thread.sleep()和schedulerExecutorService.scheduleWithFixedDelay的性能注意事项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22524752/