【发布时间】:2015-12-23 20:21:48
【问题描述】:
我对我的应用程序进行了负载测试,以找到支持计划负载所需的最大线程数。
我使用了ExecutorServiceCachedThreadPool,以便根据负载动态创建线程。现在我知道使用getLargestPoolSize() 的最大线程数的值。
我是否应该将CachedThreadPool 替换为FixedThreadPool(maxValue),以避免CachedThreadPool 的大(Integer.MAX_VALUE) 线程创建行为?
建议每种方法的优缺点。
【问题讨论】:
-
你指的是什么“大线程创建行为”?你的意思是如果没有可用的缓存线程池将创建一个新线程吗?如果是这样,更好的问题是“如果我碰巧在所有工作线程都无法使用的情况下提交另一个任务,我会介意我的线程被阻塞吗?”请记住,缓存的线程池将在之后销毁线程一定的时间。虽然您知道最大计数,但平均计数是多少?如果最大计数为 10,但平均值为 4,那么保持 10 个线程处于活动状态就没有多大意义。
-
大线程创建行为 - 如果有人发送过多请求,cachedThreadPool 不应该创建 Integer.MAX_VALUE 线程
标签: java multithreading executorservice threadpoolexecutor