在更新Java5时,Sun大幅扩展了Java线程的类库。 其中的线程池也是其中之一。 除了线程池以外,还有许多与多线程相关的内容,本文主要介绍executors线程池。
线程池可以理解为在内存中放置许多线程,通过池管理器打开处理线程执行计划的空间。 如果存在线程任务,则可以从池中取出一个,在执行结束后将线程对象返回到线程池,从而避免由于重复创建线程对象而引起的性能开销。
Java5的线程池主要有5种。
第一个是newFixedThreadPool。 此线程池的大小必须是固定的,并且必须指定初始化时可以容纳的线程数。
示例代码和执行结果
以上是线程池的容量正好等于线程数的情况,但是如果线程池的容量小于参与的线程数,结果会怎么样? 从下图可以看出,
线程池的容量小于参与的线程数
如上图所示,newFixedThreadPool的参数指定了可以执行的最大线程数,不会执行超过该数的线程。 另外,还可以发现线程的执行顺序不受参与顺序的影响。
第二个是单任务线程池,newSingleThreadExecutor。 示例代码显示了该线程池的作用。
newSingleThreadExecutor
如上图所示,每次调用execute方法时,都会调用thread-1的run方法。
第三个是大小自动变化的线程池,newCachedThreadPool。
这个线程池和上述两个优点是,可以存储的线程数是可伸缩的,在以前构建的线程可用时被重用。 executorservicepool=executors.newcachedthreadpool (; 用上面的代码实现初始化。
第四个是延迟线程池,newScheduledThreadPool
newScheduledThreadPool
还有一个单任务延迟,newsinglethreadscheduledexecutor,类似于延迟线程池。
到目前为止,我们已经大致介绍了线程池的分类,接下来我们将对线程池的使用进行一些尝试。 我想和大家一起学习。