Java:我应该在这里使用什么样的ThreadPool?

标签 java multithreading concurrency

我刚刚开始练习使用线程池。我正在用 Java 创建一个服务器客户端银行应用程序,我浏览了一些 Oracle 文档,并且正在考虑使用缓存线程池。但我运行了一些计数测试,似乎固定线程池更快。缓存的线程池滞后,并且似乎创建了太多不必要的线程。 (或者也许我在这里做错了什么)。

我的问题是,在现实世界的情况下,哪个会更有效?或者是否有其他类型的池会更有效。

另外,在我的计数测试中我有几行:

ExecutorService executor = Executors.newCachedThreadPool();

    for (int i = 0; i < 500; i++) {
          Runnable worker = new serv(10000000L + i);
          executor.execute(worker);
    }

在上面的行中,未使用的线程是否会自动重用(而不是创建新线程),或者是否需要添加其他内容以确保发生这种情况?

最佳答案

Executors.newCachedThreadPool() API中有解释

六十秒内未使用的线程将被终止并从缓存中删除。因此,保持空闲足够长的时间的池将不会消耗任何资源。

关于Java:我应该在这里使用什么样的ThreadPool?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16493671/

相关文章:

java - 在 Java 中上传目录时出现 Amazon S3 SdkClientException

java - java中两个线程同时访问一个变量

concurrency - GPars 锁返回 null

基于像素模式识别的自动化Java框架

java - 无需任何特殊数据结构即可计算移动平均线

ruby-on-rails - EC2 中的 Ruby 多线程导致奇怪的行为

objective-c - '只能使用 -performBlock : on an NSManagedObjectContext that was created with a queue.' 错误

java - 使用 PropertyChangeListener 锁定策略

java - Spring:尽管有@Autowired注释,为什么不调用setter

java - 通过log4j将junit测试用例的日志保存到单独的文件中