Java Thread.sleep()和ScheduleXecutorService.scheduleWithFixedDelay的性能注意事项
我正在尝试编写一个用于轮询的守护进程线程,它将每“3”秒轮询一次。我见过3种方法。我不知道该选哪一个?我想知道性能方面的考虑。哪一个可以是一致的并且占用较小的内存块 方法1:使用TimerTask(不打算使用它) 方法2:使用ScheduledExecutorService 方法3:使用Thread.sleep() 如果我将其归结为如下代码: 进近#2 为了 方法#3 据我所知,与普通线程相比,线程池是一种沉重的对象。 我想知道使用这两种方法的优缺点是什么 提前谢谢 问候,,Java Thread.sleep()和ScheduleXecutorService.scheduleWithFixedDelay的性能注意事项,java,multithreading,threadpool,scheduledexecutorservice,Java,Multithreading,Threadpool,Scheduledexecutorservice,我正在尝试编写一个用于轮询的守护进程线程,它将每“3”秒轮询一次。我见过3种方法。我不知道该选哪一个?我想知道性能方面的考虑。哪一个可以是一致的并且占用较小的内存块 方法1:使用TimerTask(不打算使用它) 方法2:使用ScheduledExecutorService 方法3:使用Thread.sleep() 如果我将其归结为如下代码: 进近#2 为了 方法#3 据我所知,与普通线程相比,线程池是一种沉重的对象。 我想知道使用这两种方法的优缺点是什么 提前谢谢 问候,, JE 保持规则间隔
JE
保持规则间隔的MSG可能会导致端点溢出,如果由于某种原因端点变慢,那么我认为您应该考虑推送请求的节流,而不是盲目地按规则间隔推送请求。基于所有这些需求,我认为您可以选择ExecutorService,而不是TimerTask或低级线程方法。
ExecutorService的示例将创建多少个线程?@ErdinçTaşkın此守护进程线程将是单个的,它将轮询并执行某些操作并休眠,再次唤醒并执行某些操作并在固定的持续时间内休眠。3秒时只有一个线程的标准与性能无关。我想你需要考虑其他标准,可能是3秒、30秒或300秒。这取决于客户。我们将其作为一个可配置参数。大部分时间是30秒。我还担心每种方法都会占用堆空间。如果您的硬件太小/太慢或运行太多应用程序实例,您可能需要关心它,否则就忘了它。
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();
}
}