美文网首页Java
JAVA基础之线程池

JAVA基础之线程池

作者: hypercode | 来源:发表于2022-11-28 17:13 被阅读0次

一、几个比较重要的类
1.Executor接口:线程池的根接口。
2.ExecutorService接口:继承Executor,线程池常见操作接口。
3.ScheduledExecutorService接口:继承ExecutorService,添加了重复执行任务的操作。
4.ThreadPoolExecutor类:ExecutorService的默认实现。
5.ScheduledThreadPoolExecutor类:继承ThreadPoolExecutor类,并实现ScheduledExecutorService接口,是周期性任务调度的类实现。

二、Java通过Executors类提供四种线程池,分别为:
1.newCachedThreadPool
创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。 该类返回ThreadPoolExecutor实例,corePoolSize为0;maximumPoolSize为Integer.MAX_VALUE;keepAliveTime为60L;unit为TimeUnit.SECONDS;workQueue为SynchronousQueue(同步队列)。

2.newFixedThreadPool
创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。 该类返回ThreadPoolExecutor实例,接收参数为所设定线程数量nThread,corePoolSize为nThread,maximumPoolSize为nThread;keepAliveTime为0L(不限时);unit为:TimeUnit.MILLISECONDS;WorkQueue为:new LinkedBlockingQueue<Runnable>() 无界阻塞队列。

3.newScheduledThreadPool
创建一个定长线程池,支持定时及周期性任务执行。 FinalizableDelegatedExecutorService包装的ThreadPoolExecutor实例,corePoolSize为1;maximumPoolSize为1;keepAliveTime为0L;unit为:TimeUnit.MILLISECONDS;workQueue为:new LinkedBlockingQueue<Runnable>() 无界阻塞队列。

4.newSingleThreadExecutor
创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。创建ScheduledThreadPoolExecutor实例,corePoolSize为传递来的参数,maximumPoolSize为Integer.MAX_VALUE;keepAliveTime为0;unit为:TimeUnit.NANOSECONDS;workQueue为:new DelayedWorkQueue() 一个按超时时间升序排序的队列。

备注:有的代码规范推荐用ThreadPoolExecutor手工创建线程池,而不是用Executors提供的线程池工具去创建,因为最大线程数为Integer.MAX_VALUE的线程池工具,因为可能会导致OOM。

参考链接:
自定义线程池内置线程池的使用 ThreadPoolExecutor和Executorservice 示例与注意事项 https://blog.csdn.net/qq_41358574/article/details/121852746
ExecutorService和ThreadPoolExecutor https://blog.csdn.net/qq_36898043/article/details/79732711
并发队列之无界阻塞队列LinkedBlockingQueue https://blog.csdn.net/weixin_38192427/article/details/117262033
Java四种线程池使用 https://blog.csdn.net/achuo/article/details/80623893
Java线程池种类、区别和适用场景 https://blog.csdn.net/w05980598/article/details/79425071

相关文章

  • 知识梳理目录

    Java基础 Java线程池 AQS之独占锁 AQS之Condition AQS之Condition AQS之同步...

  • Android中线程池的使用分析

    引言:说起线程池,学习过Java基础的同学估计都不陌生,Android中的线程池其实就是java的线程池。那么为什...

  • 多线程 | 4.线程池

    Java并发编程:线程池的使用 线程池基础 请求队列 线程池维护一定数量的线程,当线程池在运行状态的线程数量达上...

  • java基础之线程池

    线程池概述 程序启动一个新线程的成本是比较高的,因为它涉及到要与操作系统进行交互。而使用线程池可以很好的提高性能,...

  • JAVA 基础 之 线程池

    在执行一个多线程应用程序时创建多个线程,如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这...

  • JAVA基础之线程池

    一、几个比较重要的类1.Executor接口:线程池的根接口。2.ExecutorService接口:继承Exec...

  • 【学习笔记】java线程池

    深入理解Java之线程池

  • Java-并发编程知识点总结

    目录: 线程基础 线程池 各种各样的锁 并发容器 原子类 Java 内存模型 线程协作 AQS 框架 一、线程基础...

  • 技术栈

    技术栈 Java Web 并发基础 [ ] CopyOnWrite [ ] 线程池 [ ] CAS [ ] AQS...

  • JUC学习笔记(四)—线程池

    线程池【死磕Java并发】—–J.U.C之线程池:ThreadPoolExecutor 池化技术的好处1、降低资源...

网友评论

    本文标题:JAVA基础之线程池

    本文链接:https://www.haomeiwen.com/subject/bwkkfdtx.html