摘要:线程池的类体系结构架构首先明确一定是在里面可以供使用者调用的启动线程类是。解决了向线程池提交任务的入口问题,同时解决了如何进行重复调用任务的问题。配置一个合适的线程池是很复杂的,因此默认的一些线程池配置可以减少这个操作。
线程池的类体系结构
JAVA API 架构
首先明确一定是在Java里面可以供使用者调用的启动线程类是Thread。因此Runnable或者Timer/TimerTask等都是要依赖Thread来启动的,因此在ThreadPool里面同样也是靠Thread来启动多线程的。
默认情况下Runnable接口执行完毕后是不能拿到执行结果的,因此在ThreadPool里就定义了一个Callable接口来处理执行结果。
为了异步阻塞的获取结果,Future可以帮助调用线程获取执行结果。
Executor解决了向线程池提交任务的入口问题,同时ScheduledExecutorService解决了如何进行重复调用任务的问题。
CompletionService解决了如何按照执行完毕的顺序获取结果的问题,这在某些情况下可以提高任务执行的并发,调用线程不必在长时间任务上等待过多时间。
显然线程的数量是有限的,而且也不宜过多,因此合适的任务队列是必不可少的,BlockingQueue的容量正好可以解决此问题。
固定任务容量就意味着在容量满了以后需要一定的策略来处理过多的任务(新任务),RejectedExecutionHandler正好解决此问题。
一定时间内阻塞就意味着有超时,因此TimeoutException就是为了描述这种现象。TimeUnit是为了描述超时时间方便的一个时间单元枚举类。
配置一个合适的线程池是很复杂的,因此Executors默认的一些线程池配置可以减少这个操作。
小福利:知乎上回答的关于并发的书籍和博客 点击查看
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/69836.html
摘要:多线程同步工具箱之篇前言的多线程协调工具,,,都是在多线程代码中使用比较多的工具类之一。毫不夸张的说,这几个类,是等同于解决多线程问的包,实在有必要添加到程序员的工具箱里面。 Java多线程同步工具箱之CountDownLatch篇 前言 Java的多线程协调工具CountDownLatch,Semaphore,CyclicBarrier,ReadWriteLock都是在多线程代码中使...
摘要:直接对栈的操作只有两个,就是对栈帧的压栈和出栈。中将永久代移除,同时增加元数据区。在中,本地方法栈和虚拟机栈是在同一块儿区域,这完全取决于技术实现的决定,并未在规范中强制。 原文:https://github.com/linsheng97... 描述一下 JVM 的内存区域 程序计数器(PC,Program Counter Register)。在 JVM 规范中,每个线程都有它自己的...
摘要:堆区堆是虚拟机所管理的内存中最大的一块,它是被所有线程共享的一块内存区域,该区域在虚拟机启动的时候创建。 运行时数据区域 想要了解jvm,那对其内存分配管理的学习是必不可少的;java虚拟机在执行java程序的时候会把它所管理的内存划分成若干数据区域。这些区域有着不同的功能、用途、创建/销毁时间。java虚拟机所分配管理的内存区域如图1所示 程序计数器 程序计数器是一块比较...
摘要:目录源码之下无秘密做最好的源码分析教程源码分析之番外篇的前生今世的前生今世之一简介的前生今世之二小结的前生今世之三详解的前生今世之四详解源码分析之零磨刀不误砍柴工源码分析环境搭建源码分析之一揭开神秘的红盖头源码分析之一揭开神秘的红盖头客户端 目录 源码之下无秘密 ── 做最好的 Netty 源码分析教程 Netty 源码分析之 番外篇 Java NIO 的前生今世 Java NI...
阅读 1505·2021-09-22 15:35
阅读 1985·2021-09-14 18:04
阅读 858·2019-08-30 15:55
阅读 2434·2019-08-30 15:53
阅读 2653·2019-08-30 12:45
阅读 1170·2019-08-29 17:01
阅读 2556·2019-08-29 15:30
阅读 3490·2019-08-29 15:09