美文网首页
Java 线程池 从入门到深入

Java 线程池 从入门到深入

作者: Java技术分享45 | 来源:发表于2021-11-18 15:48 被阅读0次

类图

该类图也是从左到右按入门到深入绘制的。

Java 线程池.png

入门

创建线程池实例

使用java.util.concurrent.Executors工具类创建线程池。
Executors工具类提供如下静态方法来创建多种类型的线程池实例:

public static ExecutorService newSingleThreadExecutor()
public static ExecutorService newFixedThreadPool(int nThreads) 
public static ExecutorService newCachedThreadPool() 
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize)
public static ScheduledExecutorService newSingleThreadScheduledExecutor()
public static ExecutorService newWorkStealingPool()

Executors抽象的常用的线程池类型

  • 单线程线程池
public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }
  • 固定工作线程数量大小线程池
public static ExecutorService newFixedThreadPool(int nThreads) {
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }
  • 可缓存线程池
public static ExecutorService newCachedThreadPool() {
        return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                      60L, TimeUnit.SECONDS,
                                      new SynchronousQueue<Runnable>());
    }
  • 定时周期性线程池
public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {
        return new ScheduledThreadPoolExecutor(corePoolSize);
    }
  • 单线程定时周期性线程池
public static ExecutorService newSingleThreadExecutor() {
        return new FinalizableDelegatedExecutorService
            (new ThreadPoolExecutor(1, 1,
                                    0L, TimeUnit.MILLISECONDS,
                                    new LinkedBlockingQueue<Runnable>()));
    }
  • 窃取工作的线程池
public static ExecutorService newWorkStealingPool() {
        return new ForkJoinPool
            (Runtime.getRuntime().availableProcessors(),
             ForkJoinPool.defaultForkJoinWorkerThreadFactory,
             null, true);
    }

通过线程池运行线程

可以提交单个、多个线程。

提交单个线程

  • java.util.concurrent.Executor#execute 无返回
  • java.util.concurrent.ExecutorService#submit(java.util.concurrent.Callable<T>) 返回Future

提交多个线程

  • java.util.concurrent.ExecutorService#invokeAll(java.util.Collection<? extends java.util.concurrent.Callable<T>>)
  • java.util.concurrent.ExecutorService#invokeAny(java.util.Collection<? extends java.util.concurrent.Callable<T>>)

停止线程池

  • void shutdown() 启动有序关闭,在此过程中执行先前提交的任务,但不接受新的任务。之后提交的任务将抛出java.util.concurrent.RejectedExecutionException异常。
  • List<Runnable> shutdownNow(); 尝试停止所有正在执行的任务,停止对正在等待的任务的处理,并返回正在等待执行的任务的列表。、

线程池结束状态

  • boolean isShutdown(); 如果这个执行器已经被关闭,返回true
  • boolean isTerminated(); 如果关闭后所有任务都已完成,则返回true。注意,除非首先调用shutdown或shutdownNow,否则isTerminated永远不会为真。

Executors创建线程池不足

是否真的存在阿里巴巴Java开发手册中存在的问题有待考量。

相关文章

  • Java 线程池 从入门到深入

    类图 该类图也是从左到右按入门到深入绘制的。 入门 创建线程池实例 使用java.util.concurrent....

  • 【学习笔记】java线程池

    深入理解Java之线程池

  • 线程池

    线程池的文章:JDK线程池(一):体系结构JDK线程池(二):ThreadPoolExecutor深入分析java...

  • 深入理解Java线程池

    深入理解Java线程池 线程池初探 所谓线程池,就是将多个线程放在一个池子里面(所谓池化技术),然后需要线程的时候...

  • 线程池的原理

    参考 深入Java源码理解线程池原理 线程池是对CPU利用的优化手段 线程池使用池化技术实现,替他的实现还有连接池...

  • 线程池源码解读

    深入分析java线程池的实现原理 ps: 用一个AtomicInteger记录 线程池状态和其中的线程个数, 其中...

  • Java高并发 -- 线程池

    Java高并发 -- 线程池 主要是学习慕课网实战视频《Java并发编程入门与高并发面试》的笔记 在使用线程池后,...

  • Java 线程池 实现原理与源码深度解析

    正文 史上最清晰的线程池源码分析 鼎鼎大名的线程池。不需要多说!!!!! 这篇博客深入分析 Java 中线程池的实...

  • RxJava 从入门到爱上它 - 认识

    RxJava 从入门到爱上它 - 源码分析线程控制 RxJava 从入门到爱上它 - "变换"的深入理解 关于B...

  • 线程池从入门到精通

    什么是线程池 在 Java 中,如果每个请求到达就创建一个新线程, 创建和销毁线程花费的时间和消耗的系统资源都相当...

网友评论

      本文标题:Java 线程池 从入门到深入

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