我有一个程序,可以定期检查网页中的新数据,然后下载并将其转换为另一种格式。由于一个数据集的下载主要是等待,因此可以通过在下载另一个数据集的同时处理一个数据集来加快程序速度,因此我想使用多线程。不幸的是,即使我将执行程序构造函数参数 corePoolSize
设置为大于 1,ScheduledThreadpoolExecutor.scheduleAtFixedRate() 也会阻塞,直到一个 Runnable 完成。作为一种解决方法,我将同一个 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个处理线程将工作项出队并进行处理。
关于java - 如何并发运行ScheduledThreadPoolExecutor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26970658/