作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,假设我有以下 ScheduledExecutorService
:
public class Foo
{
private ScheduledExecutorService exec;
public Foo()
{
exec = Executors.newScheduledThreadPool(NUM_OF_TASKS);
}
public void executeOnce()
{
exec.schedule(new Runnable(){
@Override
public void run()
{
Foo.this.doSomething();
}}, DELAY, TimeUnit.MILLISECONDS);
}
}
现在,exec
用于执行周期性任务(例如目录轮询等)。但是,有一个任务(即 executeOnce
)执行一次,但需要延迟。所以,我选择使用exec
来执行这个任务,但是这样的设计好吗?相反,我应该创建一个 newSingleThreadExecutor,然后调用 shutdown 吗?例如,
public void executeOnce()
{
// Execute task and wait 'til completion
ExecutorService exec = Executors.newSingleThreadExecutor();
try {
exec.submit(new Runnable(){
@Override
public void run()
{
try
{
Thread.sleep(DELAY);
} catch (InterruptedException e) {
}
Foo.this.doSomething()
}
}).get();
} catch (InterruptedException e) {
} catch (ExecutionException e) {
}
// Shutdown executor service
exec.shutdownNow();
}
实现后者有什么好处吗?
最佳答案
如果常规任务和一次性任务以某种方式相关并且常规任务的调度并不像其执行中(可能的)延迟问题那样重要,那么我只是在同一个执行器上执行一次性任务。
使用单独的执行器的优点是可以不受干扰地安排常规任务。然而,shutdownNow()
几乎肯定不会达到预期的效果,简单的shutdown()
会更合适。
关于java - ScheduledExecutor服务复用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5886318/
采用如下所示的 ScheduledThreadPoolExecutor。如何为执行程序本身提供一个可以启动新线程的时间窗口。在该时间窗口之外,它应该停止以固定速率启动新线程。 executor = n
我目前正在学习 JAVA SE OCP 认证,因此正在尝试学习一些东西。 我目前正在阅读 IO 章节。我正在尝试将 ScheduledExecutor 与 BufferedWriter 结合起来 Sc
我正在尝试安排一个具有固定延迟重复的任务,其中延迟为 1 毫秒,并且似乎同时使用了 Timer 和 ScheduledThreadPoolExecutor类,我能做的最好的是 10 毫秒。我不期望得到
我是一名优秀的程序员,十分优秀!