7得票3回答
多线程环境下的基准测试

我正在学习多线程并发,发现在多线程环境下 Object.hashCode 的速度会变慢,同样数量的对象进行计算时,运行 4 个 threads 相对于 1 个 thread,所需时间要多出一倍以上。 但根据我的理解,这应该并行处理需要同样的时间。 你可以更改线程数。每个线程要做相同的工作量...

7得票1回答
有没有 Executor 的使用场景而不是 ExecutorService?Executor 接口的目的是什么?

我想知道是否有使用Executor而不是ExecutorService的理由。 据我所知,JDK中实现了Executor接口的所有对象都同时是ExecutorService,这意味着您必须关闭服务以避免内存泄漏。您不能关闭Executor,但可以通过ExecutorService来做到这一点...

10得票2回答
.awaitTermination()方法是否与执行器中的工作建立先行发生关系?

多年来一直存在的问题: 在这个伪代码中,ExecutorService svc = Executors.newFixedThreadPool(3); svc.submit(new Runnable() { /* code A */ }); svc.shutdown(); if(svc.awai...

144得票14回答
有没有可能创建一个具有大小限制的缓存线程池?

看起来似乎不可能创建一个带有线程数量限制的缓存线程池。 以下是标准Java库中静态Executors.newCachedThreadPool的实现方式: public static ExecutorService newCachedThreadPool() { return new T...

9得票1回答
Java CachedThreadPool和FixedThreadPool的比较

我对我的应用程序进行了负载测试,以找到支持计划负载所需的最大线程数。 我已经使用了ExecutorService CachedThreadPool,因此线程根据负载动态创建。现在,使用getLargestPoolSize(),我知道了最大线程数的值。 我应该用FixedThreadPool...

7得票3回答
通过执行器重复使用Java线程

我对以下内容感到困惑: 在Java程序中使用线程的最简单方法是扩展Thread类并实现runnable接口(或者只是实现runnable)。 要启动线程的执行,我们必须调用Thread的方法start(),它又会调用线程的run()方法。这样线程就开始了。 方法start()(除非我错了)每个...

23得票2回答
如何在Web应用程序中优雅地关闭ExecutorService?

在我的Web应用程序中,我创建了一个使用具有固定大小线程池的ExecutorService的服务。我在整个应用程序生命周期内重复使用同一个ExecutorService。private static ExecutorService pool = Executors.newFixedThread...

7得票3回答
如何在Java中使用并行处理处理对象列表

我有一个包含数千个对象的Java对象列表(List),我正在对每个对象进行迭代和进一步处理。相同的处理将在每个对象上进行。这种顺序处理方法花费了很多时间,因此,我想在Java中实现并行处理。我查看了Java中的执行器框架(executor framework),但我遇到了困难。 我想到了一种...

114得票9回答
在Java中,ExecutorService.submit和ExecutorService.execute在这段代码中有什么区别?

我正在学习使用ExectorService来池化threads并发送任务。我有一个简单的程序如下:import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.ut...

213得票7回答
选择 ExecutorService 的 submit 和 ExecutorService 的 execute 之间的区别。

如果返回值不是我的关注点,我应该如何选择 ExecutorService 的 submit 或 execute?如果我测试两个方法,除了返回值以外,我并没有看到任何区别。ExecutorService threadExecutor = Executors.newSingleThreadExec...