[TOC]一、定义让有限的工作线程(Worker Thread)来轮流异步处理无限多的任务。也可以将其归类为分工模式,它的典型实现就是线程池,也体现了经典设计模式中的享元模式。例如,海底捞的服务员(线程),轮流处理每位客人的点餐(任务),如果为每位客人都配一名专属的服务员,那 么成本就太高了(对比另一种多线程设计模式:Thread-Per-Message)注意,不同任务类型应该使用不同的线程...
[TOC]一、线程池提交任务方法线程的各种提交方式的概念:// 执行任务 void execute(Runnable command); // 提交任务 task,用返回值 Future 获得任务执行结果,会有返回值 <T> Future<T> submit(Callable<T> task); // 提交 tasks 中所有任务 <T>...
[TOC]一、Executors类概述Executors是Executor框架的工具类,提供了几种线程池创建方法,以及线程池中默认配置(如线程工厂)的处理,下面会对其中常用的几种创建线程池的方式进行说明。线程池的创建分为两种方式:ThreadPoolExecutor 和 Executors;二、Executors常用的方法方法说明public static ExecutorService n...
[TOC]一、概述1.1 线程池的作用线程池技术就是线程的重用技术,使用已经创建好的线程来执行当前任务,并提供了针对线程周期开销和资源冲突问题的解决方案。 由于请求到达时线程已经存在,因此消除了线程创建过程导致的延迟,使应用程序得到更快的响应。1.2 线程池的好处使用线程池可以重复利用已有的线程继续执行任务,避免线程在创建和销毁时造成的消耗;由于没有线程创建和销毁时的消耗,可以提高系统响应速...
[TOC]线程池模型架构自定义线程池包括:Thread Pool(线程池)+ Blocking Queue(阻塞队列)图例分析图中内容表示,三个消费线程或者说是核心线程 t1、t2、t3 通过poll方法从阻塞队列中执行任务,main线程不断地往阻塞队列中put任务task,如果核心线程处于忙碌状态,task就放进阻塞队列中。实现步骤步骤1:自定义拒绝策略接口@FunctionalInter...
[TOC]前言final在Java中是一个保留的关键字,可以声明成员变量、方法、类以及本地变量。一旦将引用声明作final,将不能改变这个引用了,编译器会检查代码,如果试图将变量再次初始化的话,编译器会报编译错误。一、final基本使用在Java中,final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)。1.1 修饰类当用final修饰一个类时,表明这个类不能被继承。最常见是就...
[TOC]前言小编之前转载过一篇文章《设计模式之享元模式》在开始本节之前,如果之前没有接触过这个概念的,建议可以先看一下,对享元模式有一个基本的认识。一、简介1.1 定义享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此...
[TOC]一、日期转换的问题1.1 问题提出下面的代码在运行时,由于 SimpleDateFormat 不是线程安全的import lombok.extern.slf4j.Slf4j; import java.text.ParseException; import java.text.SimpleDateFormat; /** * @author lilinchao * @date ...
[TOC]前一段时间在研究juc源码的时候,发现在很多工具类中都调用了一个Unsafe类中的方法,出于好奇就想要研究一下这个类到底有什么作用,于是先查阅了一些资料,一查不要紧,很多资料中对 Unsafe 的态度都是这样的画风:其实看到这些说法也没什么意外,毕竟 Unsafe 这个词直译过来就是“不安全的”,从名字里我们也大概能看来 Java 的开发者们对它有些不放心。但是作为一名极客,不能你...