谁能给我一个关于线程和ThreadPool的例子,它们之间有什么区别?使用……哪种方法最好?
由于一个线程只能运行一次,因此您必须为每个任务使用一个线程。然而,创建和启动线程的开销有些大,并且可能导致太多线程等待执行(现在不记得它的确切名称)——这进一步降低了性能。
线程池——顾名思义——是一个总是在运行的工作线程池。这些线程通常从列表中获取任务,执行它们,然后尝试执行下一个任务。如果没有任务,线程将等待。
使用线程池有几个优点:
- 你不必为每个任务创建一个线程
- 您通常拥有系统的最佳线程数(也取决于JVM)
- 你可以专注于写任务,并使用线程池来管理基础设施
编辑:这里有一些关于并发性的非常好的文章:萨特的磨坊,看看底部的更多链接。虽然它们主要是为C/c++编写的,但一般概念是相同的,因为它还描述了并发解决方案和硬件之间的相互依赖关系。关于理解并发性能问题的一篇好文章是drdobbs.com上的这篇文章。
线程池是分配给执行统一任务的线程的集合。使用线程池模式的优点是可以定义允许同时执行多少线程。这是为了避免服务器因高CPU负载或内存不足而崩溃,例如,服务器的硬件容量最多只能支持每秒100个请求。
数据库池与线程池有类似的概念。
此模式在大多数后端服务器的应用程序流程中广泛使用。
线程,是执行任务的单元。