191得票12回答
Java执行器:如何在不阻塞的情况下被通知任务完成?

假设我有一个充满任务的队列需要提交给执行器服务,我希望它们一个接一个地被处理。我能想到的最简单的方法是: 从队列中取出一个任务 将其提交给执行器 调用返回的Future的.get()方法并阻塞直到结果可用 从队列中再取出另一个任务... 然而,我试图完全避免阻塞。如果我有10,000个...

113得票16回答
如何使ThreadPoolExecutor的submit()方法在饱和时阻塞?

我希望创建一个 ThreadPoolExecutor,当线程池达到最大容量并且阻塞队列已满时,submit() 方法会阻塞以避免添加新任务。这是否需要实现自定义的 RejectedExecutionHandler,或者是否有使用标准 Java 库实现该功能的现成方法?

89得票5回答
Future.get() 方法调用会阻塞,这真的是可取的吗?

以下是伪代码片段。 下面的代码是否不符合并行异步处理的概念? 我之所以这样问,是因为在下面的代码中,主线程会提交一个任务以在不同的线程中执行。在将任务提交到队列后,它会阻塞在Future.get()方法上等待任务返回值。我宁愿在主线程中执行任务,而不是提交到另一个线程并等待结果。通过在新线程...

76得票10回答
当ThreadPoolExecutor的队列已满时会阻塞吗?

我正在尝试使用ThreadPoolExecutor执行大量任务。以下是一个假设的示例:def workQueue = new ArrayBlockingQueue<Runnable>(3, false) def threadPoolExecutor = new ThreadPool...

58得票7回答
什么时候应该使用Java的Thread而不是Executor?

Executor看起来像是一个干净的抽象层。但什么情况下您会想要直接使用Thread,而不是依赖更健壮的executor呢?

49得票5回答
如何正确地从执行器中捕获RuntimeExceptions?

假设我有以下代码:ExecutorService executor = Executors.newSingleThreadExecutor(); executor.execute(myRunnable); 现在,如果myRunnable抛出了RuntimeException,我该如何捕获它?一...

44得票8回答
Java Executors:我该如何设置任务优先级?

是否有可能为执行器(Executors)执行的任务设置优先级?我在JCIP中找到了一些关于这个问题的说法,它可能是可行的,但我找不到任何例子,并且文档中也没有相关内容。 来自JCIP: 执行策略指定任务执行的“何时、何地、如何以及如何”等内容,包括: ... 任务...

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

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

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

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

37得票4回答
Java Executor最佳实践:用于永久运行任务的任务

我正在开发一个Java项目,需要异步运行多个任务。我听说Executor是实现该功能的最佳方式,因此我正在熟悉它。(耶,通过学习赚钱!)但是,我不清楚实现我想做的事情的最佳方法。 为了举例说明,假设我有两个任务正在运行。这两个任务都不会终止,并且应该在应用程序运行期间一直运行。我正在编写一个...