Java Executors线程池入门

在Java5的更新中,Sun对Java线程的类库做了大量的扩展,其中线程池就是其中之一。除了线程池之外,还有很多跟多线程有关的,但是这篇文章主要讲解executors线程池。

所谓线程池,可以理解为在内存中开辟一块空间,里面放了众多的线程,通过池管理器来处理线程的执行调度。当有线程任务时,从池中取一个,执行结束后,线程对象回归线程池,这样可以避免反复创建线程对象所带来的性能开销。

Java5中的线程池主要有五种,

第一种:newFixedThreadPool,该线程池为固定大小,需要在初始化的时候指定可以容纳的线程数量。

Java Executors线程池入门_第1张图片
示例代码以及执行结果

以上是线程池的容量刚好等于线程的数量的情况,如果线程池的容量小于加入的线程的个数,结果会如何呢?可以通过下图看到,

Java Executors线程池入门_第2张图片
线程池容量小于加入线程的个数

从上图可以看出,newFixedThreadPool的参数指定了可以运行的线程的最大数目,超过这个数目加进去的线程是不会运行的。除此,还可以看到线程的运行顺序,不受加入顺序的影响。

第二种,单任务线程池,newSingleThreadExecutor。通过示例代码,可以看出这个线程池的作用。

Java Executors线程池入门_第3张图片
newSingleThreadExecutor

从上图可以看出,每次调用execute方法都是调用了thread-1的run方法。

第三种,大小自动变化的线程池,newCachedThreadPool。

该线程池跟上面两种的在于,它的可以存放的线程个数是可伸缩的,而且当以前构造的线程可用时将重用他们。ExecutorService pool = Executors.newCachedThreadPool();通过上面的代码实现初始化。

第四种,延迟线程池,newScheduledThreadPool

Java Executors线程池入门_第4张图片
newScheduledThreadPool

除此,还有单任务延迟,newSingleThreadScheduledExecutor,跟延迟线程池类似。

到现在为止,已经对线程池的分类做了一个大概的描述,后续会对线程池的使用做一些尝试,希望可以跟大家一起交流学习。

你可能感兴趣的:(Java Executors线程池入门)