52.ReentrantReadWriteLock介绍

[TOC]前言之前也整理过一篇关于读写锁的文章:《Java锁--读写锁简介》,现在又碰到这个话题,就在系统清晰的整理一遍,温故一下之前所学习的并发知识。一、概述ReentrantLock是独占锁,某一时刻只有一个线程可以获取该锁,而实际上会存在很多读多写少的场景,而读操作本身并不会存在数据竞争问题,如果使用独占锁,可能会导致其中一个读线程使其他的读线程陷入等待,降低性能。针对这种读多写少的场...

Java 2022-11-27 PM 1217次 0条

51.ReentrantLock原理

[TOC]前言ReentrantLock关系类图:ReentrabtLock实现了LOCK接口,里面维护了一个sync同步器,Sync是一个抽象类,有两种实现FairSync和NonfairSync分别对应着公平锁和非公平锁两种实现。一、非公平锁实现原理1.1 示例代码示例import lombok.extern.slf4j.Slf4j; import java.util.concurren...

Java 2022-11-26 PM 966次 0条

50.AQS实现原理介绍

[TOC]前言Java.util.concurrent(J.U.C)大大提高了并发性能,AQS是JUC的核心,是阻塞式锁相关的同步器工具的框架,是一个主要用来构建锁和同步器的抽象类。一、AQS介绍AQS 全程为 AbstractQueuedSynchronizer,它提供了一个 FIFO 队列,可以看成是一个用来实现同步锁及其它涉及到同步功能的核心组件,常见的有,ReentrantLock、...

Java 2022-11-26 PM 1217次 0条

49.Fork&Join框架介绍

[TOC]一、概述Fork/Join 是 JDK 1.7 加入的新的线程池实现,它体现的是一种分治思想,适用于能够进行任务拆分的CPU密集型运算。所谓的任务拆分,是将一个大任务拆分为算法上相同的小任务,直至不能拆分可以直接求解。跟递归相关的一些计算,如归并排序、斐波那契数列、都可以用分治思想进行求解。Fork/Join 在分治的基础上加入了多线程,可以把每个任务的分解和合并交给不同的线程来完...

Java 2022-11-24 PM 1262次 0条

48.Tomcat线程池简单介绍

[TOC]前言tomcat的线程池扩展了jdk的executor,而且队列用的是自己的task queue,因此其策略与jdk的有所不同。本篇将讨论一下tomcat线程池和jdk线程池的不同之处,以及tomcat为什么要重写jdk线程池的方法。一、Tomcat的请求处理过程一个客户端请求到达Tomcat之后的处理流程如上图所示:当Tomcat启动后,Connector的接收器Acceptor...

Java 2022-11-23 PM 1529次 0条

47.任务调度线程池介绍

[TOC]前言JDK 1.5开始提供ScheduledThreadPoolExecutor类,ScheduledThreadPoolExecutor类继承ThreadPoolExecutor类重用线程池实现了任务的周期性调度功能。在JDK 1.5之前,实现任务的周期性调度主要使用的是Timer类和TimerTask类。本文将简单介绍ScheduledThreadPoolExecutor类与T...

Java 2022-11-22 PM 1162次 0条

46.异步模式之工作线程

[TOC]一、定义让有限的工作线程(Worker Thread)来轮流异步处理无限多的任务。也可以将其归类为分工模式,它的典型实现就是线程池,也体现了经典设计模式中的享元模式。例如,海底捞的服务员(线程),轮流处理每位客人的点餐(任务),如果为每位客人都配一名专属的服务员,那 么成本就太高了(对比另一种多线程设计模式:Thread-Per-Message)注意,不同任务类型应该使用不同的线程...

Java 2022-11-21 PM 898次 0条

45.ThreadPoolExecutor线程池提交和关闭方法介绍

[TOC]一、线程池提交任务方法线程的各种提交方式的概念:// 执行任务 void execute(Runnable command); // 提交任务 task,用返回值 Future 获得任务执行结果,会有返回值 <T> Future<T> submit(Callable<T> task); // 提交 tasks 中所有任务 <T>...

Java 2022-11-20 PM 1325次 0条

44.Executors创建线程池方法介绍

[TOC]一、Executors类概述Executors是Executor框架的工具类,提供了几种线程池创建方法,以及线程池中默认配置(如线程工厂)的处理,下面会对其中常用的几种创建线程池的方式进行说明。线程池的创建分为两种方式:ThreadPoolExecutor 和 Executors;二、Executors常用的方法方法说明public static ExecutorService n...

Java 2022-11-18 PM 1014次 0条

43.ThreadPoolExecutor线程池状态和构造方法

[TOC]一、概述1.1 线程池的作用线程池技术就是线程的重用技术,使用已经创建好的线程来执行当前任务,并提供了针对线程周期开销和资源冲突问题的解决方案。 由于请求到达时线程已经存在,因此消除了线程创建过程导致的延迟,使应用程序得到更快的响应。1.2 线程池的好处使用线程池可以重复利用已有的线程继续执行任务,避免线程在创建和销毁时造成的消耗;由于没有线程创建和销毁时的消耗,可以提高系统响应速...

Java 2022-11-17 PM 1073次 0条