系统启动一个线程的成本是比较高的,因为启动线程的操作要与操作系统交互。如果程序中需要创建大量生存期较短的线程,那么使用线程池将会大幅度提高程序的运行效率。线程池中保存了一定数目可重复使用的线程,因此可以在使用时直接从线程池中获得一个线程,用完之后还可以把线程放回线程池以便后面再次使用。
线程池在系统启动时就创建大量线程,程序将一个Runnable或Callable实现类对象传递给线程池,线程池就会启动一个空闲线程来执行它们的run()方法或call()方法。当run()方法或call()方法执行完之后,线程并不会死亡,而是再次返回线程池中等待执行下一个对象的run()方法或call()方法。
使用线程池还有一个好处就是能够控制系统中并发线程的数量。当系统包含大量并发线程时,会导致系统性能下降,而线程池的最大线程数参数控制系统中并发线程不会超过设定值。
Java语言使用ExecutorService和ScheduledExecutorService这两个接口来表示线程池,而使用Executors类生成线程池。Executors位于java.util.concurrent包下,这个类提供了一些静态方法来产生线程池,这些方法如表14-6所示。
表14-6 Executors类的方法
上一篇:前端面试题集锦(2)