我知道线程池是一件好事情,因为它可以重复使用线程,从而节省创建新线程的成本。但我的问题是,使用线程池有没有缺点?在哪种情况下使用线程池不如仅使用单个线程?
我知道线程池是一件好事情,因为它可以重复使用线程,从而节省创建新线程的成本。但我的问题是,使用线程池有没有缺点?在哪种情况下使用线程池不如仅使用单个线程?
Threadpool 只适合用于完成时间较短的操作。Threadpool 线程不适合进行长时间运行的操作,否则容易导致线程饥饿现象。
如果您需要一个特定优先级的线程,则 threadpool 线程不适合。
如果您有一些任务需要使线程长时间阻塞,则线程池中的大量被阻塞的线程可能会防止任务启动,因为线程池有最大线程数的限制。
除了Gray的回答之外。
另一个用例是,如果您正在使用线程本地变量或将线程用作某种哈希表或有状态自定义线程实现的键。在这种情况下,即使任务失败,您也必须关心在特定任务使用线程时清除状态。否则,可能会出现一些意外情况:下一个使用具有某些状态的线程的任务可能会开始运行错误。
如果您不打算停止使用线程,那么线程是更好的选择,例如在无限循环中。当执行许多不同时发生的任务时,线程池是最好的选择。特别是当任务很短时,使用相同线程的开销和清晰度更大。
这取决于您要如何利用线程池。例如,如果您的系统不需要并行执行任务,则线程池将毫无用处。它会保持准备好永远不会到来的工作的不必要的线程。在这种情况下,您仍然可以使用SingleThreadExecutor
。如果您还没有,请查看此链接,它可能会为您澄清:线程池模式