首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Executor和scheduleWithFixedDelay()

Executor和scheduleWithFixedDelay()
EN

Stack Overflow用户
提问于 2013-11-26 21:08:30
回答 3查看 2.4K关注 0票数 1

这是我的任务。我有一个类中的静态作业队列和一个将作业添加到队列中的静态方法。有n个线程从队列中轮询并执行拉出的作业。我需要在一个间隔内同时进行n个线程轮询。也就是说,所有三个人都应该每5秒进行一次投票,然后找工作。

我有这个:

代码语言:javascript
复制
public class Handler {

    private static final Queue<Job> queue = new LinkedList<>();

    public static void initialize(int maxThreads) { // maxThreads == 3

        ScheduledExecutorService executorService =
            Executors.newScheduledThreadPool(maxThreads);

        executorService.scheduleWithFixedDelay(new Runnable() {
            @Override
            public void run() {
                Job job = null;
                synchronized(queue) {
                    if(queue.size() > 0) {
                        job = queue.poll();
                    }
                }
                if(job != null) {
                    Log.log("start job");
                    doJob(job);
                    Log.log("end job");
                }
            }    
        }, 15, 5, TimeUnit.SECONDS);

    }

}

当我添加4个任务时,我得到了这个输出:

代码语言:javascript
复制
startjob
endjob
startjob
endjob
startjob
endjob
startjob
endjob

很明显,这些线程依次执行这些任务,而我需要一次执行3次。我做错了什么?谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-26 21:26:15

从文件中:

如果此任务的任何执行时间超过其周期,则随后的执行可能会延迟启动,但不会同时执行。

因此,您必须安排三个独立的任务,以便它们同时运行。还请注意,调度的executor服务是一个固定的线程池,对于许多用例来说不够灵活。一个很好的成语是使用预定的服务将任务提交给常规的executor服务,该服务可以配置为一个可调整大小的线程池。

票数 2
EN

Stack Overflow用户

发布于 2013-11-26 21:26:51

您正在以固定的延迟运行ScheduledExecutorService,这意味着您的作业将一个接一个地运行。使用固定线程池,每次提交3个线程。这是举例说明

票数 0
EN

Stack Overflow用户

发布于 2013-11-26 21:36:48

如果您声明了Job extends Runnable,那么您的代码就会大大简化:

首先,在全局可访问的某个位置声明执行者:

代码语言:javascript
复制
public static final ExecutorService executor = Executors.newFixedThreadPool(MAX_THREADS);

然后添加一个这样的工作:

代码语言:javascript
复制
executor.submit(new Job());

你完了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20227984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档