Java线程池

一、自定义线程池集成ThreadPoolExecutor

二、JDK自带的几种线程池

1、newFixedThreadPool

  newFixedThreadPool,创建固定大小的线程池,poolCoreSize和MaxPoolSize相等,到达coreSize则将新的任务放到缓存队列,有线程执行完毕,直接去取。
  创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待 。     

2、newSingleThreadExecutor

newSingleThreadExecutor,创建一个单线程的核心池,核心池的大小和最大池大小为1。
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。示例代码如下:
ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
for (int i = 0; i < 10; i++) {
final int index = i;
singleThreadExecutor.execute(new Runnable() {
 
@Override
public void run() {
try {
System.out.println(index);
Thread.sleep(2000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
}

结果依次输出,相当于顺序执行各个任务。

3、newCacheThreadPool

 无大小限制的线程池,提交一个任务就创建一个线程执行。
 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。线程池为无限大,当执行第二个任务时第  一个任务已经完成,会复用执行第一个任务的线程,而不用每次新建线程。

4.newScheduledThreadPool

创建一个定长线程池,支持定时及周期性任务执行。
延迟执行。
ScheduledExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(5);
scheduledThreadPool.schedule(new Runnable() {
       @Override
        public void run() {
        System.out.println("delay 3 seconds");
  }
  }, 3, TimeUnit.SECONDS);
周期执行
scheduledThreadPool.scheduleAtFixedRate(new Runnable() {
 
        @Override
        public void run() {
            System.out.println("delay 1 seconds, and excute every 3 seconds");
      }
      }, 1, 3, TimeUnit.SECONDS);

表示延迟1秒后每3秒执行一次。
ScheduledExecutorService比Timer更安全,功能更强大。

【参考】https://www.cnblogs.com/zhujiabin/p/5404771.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本篇文章讲述Java中的线程池问题,同样适用于Android中的线程池使用。本篇文章参考:Java线程池分析,Ja...
    Android进阶与总结阅读 871评论 0 5
  • 序言 近日后台需要一些数据,需要从网上爬取,但是爬取的过程中,由于访问速度太频繁,造成IP被封,最终通过线程池解决...
    非专业程序员阅读 968评论 0 3
  • 本篇文章讲述Java中的线程池问题,同样适用于Android中的线程池使用。本篇文章参考:Java线程池分析,Ja...
    Ruheng阅读 7,290评论 1 64
  • http://blog.csdn.net/evankaka/article/details/51489322 在线...
    ZhouWG阅读 512评论 0 0
  • Java通过Executors提供四种线程池,分别为: newCachedThreadPool创建一个可缓存线程池...
    JaocbYu阅读 416评论 0 0

友情链接更多精彩内容