43得票2回答
优雅地实现队列长度指示器到ExecutorServices

为什么java.util.concurrent没有为其ExecutorService提供队列长度指示器呢?最近我发现自己做了这样的事情:ExecutorService queue = Executors.newSingleThreadExecutor(); AtomicInteger queu...

12得票5回答
当前线程执行者的捕获

我正在使用Guava的ListenableFuture,其中一个好处是可以通过将Executor传递给Futures.addCallback方法来一次性执行回调函数,也就是要求在指定的线程/执行器上执行回调。 在我的Android应用程序中,我希望能够在UI线程中启动基于ListenableF...

7得票1回答
在Java中调用ExecutorService.shutDown()

我开始学习ExecutorService类。文档(和在线教程)说要始终调用ExecutorService.shutDown()以回收资源。但是,文档还说,在调用shutDown()之后,不会接受新任务。所以,我的问题是,每当我需要并行处理数据时,我是否必须始终实例化一个新的ExecutorSe...

37得票8回答
如何为可调用的线程命名?

我正在使用ExecutorService线程池来执行一个Callable对象,我想为这个线程命名。 更具体地说,在旧版本中我是这样做的-Thread thread = new Thread(runnable Task); thread.setName("My Thread Name"); 我...

44得票3回答
Java8的ForkJoinPool和Executors.newWorkStealingPool之间的详细区别是什么?

使用以下哪种方法时的低级差异是什么:ForkJoinPool = new ForkJoinPool(X); 和ExecutorService ex = Executors.newWorkStealingPool(X); 其中X是所需并行性水平,即运行的线程。 根据文档,我发现它们相似。此外,请...

10得票3回答
如何检查线程是否在ExecutorService线程池中运行

如何检查线程是否在线程ExecutorService池中运行? 背景: 我想在线程池中的线程之间进行同步,如果设置了标志。 因此,如果标志设置为true以进行同步,则必须检查其他线程是否正在运行,或者等待其完成,然后使用同步调用阻塞线程,以便其他线程将等待该阻塞线程完成。 如果未设置标志,...

11得票3回答
Java固定线程池和调度线程池的区别

我有一个固定的线程池,每次运行7个并发线程(带有队列),我想将其转换为一个调度线程池,仅运行7个并发作业,但可以排队/计划更多。 阅读文档并没有真正帮助我... newFixedThreadPool 创建一个线程池,该线程池重用一组固定的线程,这些线程在共享的无界队列上操作。如果任何线程...

8得票3回答
如何并行处理文件中的行?

我想读取一个大文件,处理每一行并将结果插入到数据库中。我的目标是将行的处理并行化,因为每个进程都是长时间运行的任务。因此,我希望有一个线程继续读取,多个线程继续处理,并且一个线程保持以块的形式插入到数据库中。 我将其分解如下: 1)按顺序逐行读取文件(容易) 2)将每行发送到线程池(3个...

8得票3回答
ExecutorService的shutdown()方法不会等待所有线程执行完毕就结束。

我有一个代码,其中4个线程同时运行。我想要等待直到这4个线程都完成。只有在此之后才能继续应用程序流程。 我尝试了两种方法: 1.使用Thread#join(),这种方法按预期工作。在join()之后执行的代码仅在所有线程完成后执行。 2.使用ExecutorService#shutdow...

12得票4回答
如何等待使用不同`ExecutorServices`创建的`Future`列表

好的,我知道第一个回答 / 评论会是“使用一个ExecutorService和invokeAll”。但是,我们将线程池分开保留有很好的理由(不详述)。 所以我有一个线程池列表(ExecutorServices),我需要做的是使用submit在每个线程池上调用不同的Callable(没有问题)...