21得票5回答
将任务添加到ThreadPoolExecutor的BlockingQueue中是否可行?

针对JavaDoc中ThreadPoolExecutor的说明不明确,无法确定直接向支持执行器的BlockingQueue添加任务是否可以接受。然而文档中提到,调用executor.getQueue()主要用于调试和监控。 我使用自己的BlockingQueue构建了一个ThreadPool...

21得票2回答
如何正确关闭Java的ExecutorService

我有一个简单的Java ExecutorService,它运行一些任务对象(实现Callable接口)。ExecutorService exec = Executors.newSingleThreadExecutor(); List<CallableTask> tasks = ne...

21得票3回答
在ExecutorService上安排守护线程,解释为什么这是不好的形式。

我对使用ExecutorService调度的线程进行有序关闭的概念感到舒适; 也就是说,调用shutdown或shutdownNow将导致在池中创建的线程优雅地退出。如果它们响应interrupt,您可以确保会调用finally等,并且您将获得干净且可预测的退出(可以清理任何资源等)。 但是...

20得票3回答
如何使用ExecutorService轮询直到结果出现

我有一个情景需要轮询远程服务器以检查任务是否已经完成。一旦任务完成,我会发起另一个请求来获取结果。 我最初考虑使用 SingleThreadScheduledExecutor 和 scheduleWithFixedDelay 进行轮询:ScheduledExecutorService exec...

20得票4回答
Java线程池/执行器服务和wait() - 线程和任务队列会发生什么?

我找过一些资料,但没有找到答案,所以我想确认一下。 假设我有一个固定大小的线程池 - ExecutorService pool = Executors.newFixedThreadPool(5); 并且我有一些代码:pool.execute(new Runnable(){ try{...

20得票4回答
使用InheritableThreadLocal与ThreadPoolExecutor - 或者 - 不重用线程的ThreadPoolExecutor

我正在尝试同时使用InheritableThreadLocal和ThreadPoolExecutor。 这会出问题,因为ThreadPoolExecutor对于每个池重复使用线程(毕竟它是一个池),这意味着InheritableThreadLocal不能按预期工作。现在问题对我来说似乎很明显...

19得票5回答
Java执行器:如何停止已提交的任务?

我使用执行器提交了一个任务,我需要它在一定时间后停止(例如5分钟)。我尝试像这样做: for (Future<?> fut : e.invokeAll(tasks, 300, TimeUnit.SECONDS)) { try { fu...

19得票5回答
执行器相对于新线程的优势

在Java程序中,使用执行器(Executors)相比直接使用线程(Threads)有什么好处? 例如:ExecutorService pool = Executors.newFixedThreadPool(2); void someMethod() { //Thread n...

19得票2回答
如何停止Java Executor类中的所有可运行线程?

final ExecutorService executor = Executors.newFixedThreadPool(1); final Future<?> future = executor.submit(myRunnable); executor.shutdown(); ...

19得票2回答
ScheduledExecutorService:何时应调用shutdown?

我在我的应用程序中使用了 ScheduledExecutorService。我需要在某些实用类中定期使用它来运行计划线程。 将 ScheduledExecutorService 保存在静态字段中是一个好的设计吗?如果这样做,是否必须调用ScheduledExecutorService.shu...