Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何并发运行ScheduledThreadPoolExecutor_Java_Multithreading_Scheduler - Fatal编程技术网

Java 如何并发运行ScheduledThreadPoolExecutor

Java 如何并发运行ScheduledThreadPoolExecutor,java,multithreading,scheduler,Java,Multithreading,Scheduler,我有一个程序,定期检查网页上的新数据,然后下载并转换成另一种格式。由于一个数据集的下载主要由等待组成,在下载另一个数据集的同时处理一个数据集可以加快程序的速度,因此我想使用多线程。不幸的是,ScheduledThreadpoolExecutor.scheduleAtFixedRate()阻塞直到一个Runnable完成,即使我将executor构造函数参数corePoolSize设置为大于1。作为一种解决方法,我将相同的Runnable排队两次,但是否有更优雅的解决方案 import java.

我有一个程序,定期检查网页上的新数据,然后下载并转换成另一种格式。由于一个数据集的下载主要由等待组成,在下载另一个数据集的同时处理一个数据集可以加快程序的速度,因此我想使用多线程。不幸的是,ScheduledThreadpoolExecutor.scheduleAtFixedRate()阻塞直到一个Runnable完成,即使我将executor构造函数参数
corePoolSize
设置为大于1。作为一种解决方法,我将相同的Runnable排队两次,但是否有更优雅的解决方案

import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class Downloader
{
    public static void main(String[] args)
    {
        ScheduledThreadPoolExecutor e = new ScheduledThreadPoolExecutor(4);
        e.scheduleAtFixedRate(new Scheduler(), 0, 1, TimeUnit.SECONDS);
        e.scheduleAtFixedRate(new Scheduler(), 1, 1, TimeUnit.SECONDS);
    }
}

将任务分为两个子任务,并在各自的线程池中分别调度这些子任务


您可以让X个线程执行下载任务并将工作排队到作业队列上,而Y个处理线程则将工作项出列并进行处理。

为什么不想使用单独的线程进行处理和下载?我刚才说的有点简化。有下载,转换,上传和重组的程序将需要更多的时间比我有,在目前。