Java Executors线程池入门

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

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

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

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

示例代码以及执行结果

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

线程池容量小于加入线程的个数

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

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

newSingleThreadExecutor

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

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

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

第四种,延迟线程池,newScheduledThreadPool

newScheduledThreadPool

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1、new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? ``` new Thread...
    Jannonx阅读 7,638评论 0 6
  • 线程池的基本思想还是一种对象池的思想,开辟一块内存空间,里面存放了众多(未死亡)的线程,池中线程执行调度由池管理器...
    Arya鑫阅读 11,635评论 0 5
  • 前段时间遇到这样一个问题,有人问微信朋友圈的上传图片的功能怎么做才能让用户的等待时间较短,比如说一下上传9张图片,...
    加油码农阅读 4,921评论 0 2
  • 本篇文章讲述Java中的线程池问题,同样适用于Android中的线程池使用。本篇文章参考:Java线程池分析,Ja...
    Android进阶与总结阅读 4,210评论 0 5
  • 你以为争的是钱,车或房子,其实是争的情感的归属和认同 触觉敏感的人在生活,交际和工作中比一般人付岀的能量更多
    燕燕584阅读 708评论 0 0