49.Fork&Join框架介绍

[TOC]一、概述Fork/Join 是 JDK 1.7 加入的新的线程池实现,它体现的是一种分治思想,适用于能够进行任务拆分的CPU密集型运算。所谓的任务拆分,是将一个大任务拆分为算法上相同的小任务,直至不能拆分可以直接求解。跟递归相关的一些计算,如归并排序、斐波那契数列、都可以用分治思想进行求解。Fork/Join 在分治的基础上加入了多线程,可以把每个任务的分解和合并交给不同的线程来完成,进一步提升了运算效率。Fork/Join 默认会创建与CPU核心数大小相同的线程池。二、Fork/Join框架介绍Fork/Join框架主要包含三个模块:线程池:ForkJoinPool任务对象:...

Java 2022-11-24 PM 1325℃ 0条

48.Tomcat线程池简单介绍

[TOC]前言tomcat的线程池扩展了jdk的executor,而且队列用的是自己的task queue,因此其策略与jdk的有所不同。本篇将讨论一下tomcat线程池和jdk线程池的不同之处,以及tomcat为什么要重写jdk线程池的方法。一、Tomcat的请求处理过程一个客户端请求到达Tomcat之后的处理流程如上图所示:当Tomcat启动后,Connector的接收器Acceptor会监听是否有客户端连接。一旦监听到客户端连接,则将连接交给线程池Executor,开始执行请求响应任务。Http11Processor负责从客户端连接中读取Http报文并进行解析,解析后的报文封装成R...

Java 2022-11-23 PM 1580℃ 0条

47.任务调度线程池介绍

[TOC]前言JDK 1.5开始提供ScheduledThreadPoolExecutor类,ScheduledThreadPoolExecutor类继承ThreadPoolExecutor类重用线程池实现了任务的周期性调度功能。在JDK 1.5之前,实现任务的周期性调度主要使用的是Timer类和TimerTask类。本文将简单介绍ScheduledThreadPoolExecutor类与Timer类的区别,ScheduledThreadPoolExecutor类相比于Timer类来说,究竟有哪些优势,以及二者分别实现任务调度的简单示例。一、Timer与TimerTask概述使用 Tim...

Java 2022-11-22 PM 1211℃ 0条

46.异步模式之工作线程

[TOC]一、定义让有限的工作线程(Worker Thread)来轮流异步处理无限多的任务。也可以将其归类为分工模式,它的典型实现就是线程池,也体现了经典设计模式中的享元模式。例如,海底捞的服务员(线程),轮流处理每位客人的点餐(任务),如果为每位客人都配一名专属的服务员,那 么成本就太高了(对比另一种多线程设计模式:Thread-Per-Message)注意,不同任务类型应该使用不同的线程池,这样能够避免饥饿,并能提升效率例如,如果一个餐馆的工人既要招呼客人(任务类型A),又要到后厨做菜(任务类型B)显然效率不咋地,分成服务员(线程池A)与厨师(线程池B)更为合理,当然你能想到更细致的...

Java 2022-11-21 PM 946℃ 0条

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

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

Java 2022-11-20 PM 1394℃ 0条

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

[TOC]一、Executors类概述Executors是Executor框架的工具类,提供了几种线程池创建方法,以及线程池中默认配置(如线程工厂)的处理,下面会对其中常用的几种创建线程池的方式进行说明。线程池的创建分为两种方式:ThreadPoolExecutor 和 Executors;二、Executors常用的方法方法说明public static ExecutorService newFixedThreadPool(int nThreads)一种线程数量固定的线程池,当线程处于空闲状态时,他们并不会被回收,除非线程池被关闭。当所有的线程都处于活动状态时,新的任务都会处于等待状态...

Java 2022-11-18 PM 1061℃ 0条

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

[TOC]一、概述1.1 线程池的作用线程池技术就是线程的重用技术,使用已经创建好的线程来执行当前任务,并提供了针对线程周期开销和资源冲突问题的解决方案。 由于请求到达时线程已经存在,因此消除了线程创建过程导致的延迟,使应用程序得到更快的响应。1.2 线程池的好处使用线程池可以重复利用已有的线程继续执行任务,避免线程在创建和销毁时造成的消耗;由于没有线程创建和销毁时的消耗,可以提高系统响应速度;通过线程池可以对线程进行合理的管理,根据系统的承受能力调整可运行线程数量的大小等。1.3 线程池的结构说明Executor:线程池相关顶级接口,是 Java 异步任务目标的“执行者”接口,其目标是...

Java 2022-11-17 PM 1121℃ 0条

42.并发编程之自定义线程池

[TOC]线程池模型架构自定义线程池包括:Thread Pool(线程池)+ Blocking Queue(阻塞队列)图例分析图中内容表示,三个消费线程或者说是核心线程 t1、t2、t3 通过poll方法从阻塞队列中执行任务,main线程不断地往阻塞队列中put任务task,如果核心线程处于忙碌状态,task就放进阻塞队列中。实现步骤步骤1:自定义拒绝策略接口@FunctionalInterface // 拒绝策略 interface RejectPolicy<T> { void reject(BlockingQueue<T> queue, T task)...

Java 2022-11-16 PM 1150℃ 0条

41.并发编程之final详解

[TOC]前言final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦将引用声明作final,将不能改变这个引用了,编译器会检查代码,如果试图将变量再次初始化的话,编译器会报编译错误。一、final基本使用在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。1.1 修饰类当用final修饰一个类时,表明这个类不能被继承。最常见是就是String类,任何类都无法继承它。public final class String implements java.io.Serializable, Comparable<Stri...

Java 2022-11-15 PM 1460℃ 0条

40.并发编程之享元模式

[TOC]前言小编之前转载过一篇文章《设计模式之享元模式》在开始本节之前,如果之前没有接触过这个概念的,建议可以先看一下,对享元模式有一个基本的认识。一、简介1.1 定义享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式。在享元模式中可以共享的相同内容称为内部状态(IntrinsicState),而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State),由于区分了内部状...

Java 2022-11-12 PM 1218℃ 0条