自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 资源 (1)
  • 收藏
  • 关注

原创 线程池原理剖析

目录为什么需要线程池线程池的模型线程池相关属性和状态线程池的拒绝策略ScheduledThreadPoolExecutor-调度线程池为什么需要线程池在web开发中,服务器需要接受并处理请求,所以会为一个请求来分配一个线程来进行处理。如果每次请求都新创建一个线程的话实现起来非常简便,但是存在一个问题:如果并发的请求数量非常多,但每个线程执行的时间很短,这样就会频繁的创建和销毁线程,如此一来会大大降低系统的效率。可能出现服务器在为每个请求创建新线程和销毁线程上花费的时间和消耗的系统资源要比处理实际的用户

2020-11-10 17:06:44 346 2

原创 FutureTask源码剖析

目录Future和FutureTaskFuture的方法FutureTask的源码总结Future和FutureTask我们通过FutureTask的实现追踪如下:Runable接口:提供线程回调方法run()方法。Future: 定义返回结果的相关操作抽象方法。RunableFuture接口: 整合Runable和Future两个接口的抽象方法。Future的方法取消当前线程执行的任务。boolean cancel(boolean mayInterruptIfRunning)

2020-11-10 15:45:09 266

原创 PriorityBlockingQueue和DelayQueue队列剖析

目录PriorityBlockingQueue优先级阻塞队列DelayQueue延迟队列在阻塞队列BlockingQueue数组和链表的实现中剖析了基于数组和链表的实现的阻塞队列,接下来来剖析一下与优先级相关的阻塞队列PriorityBlockingQueue和DelayQueue。在介绍之前需要了解优先级队列相关的知识,以下是优先级队列的相关知识链接:源码阅读(12):Java中主要的Queue、Deque结构——PriorityQueue集合(上)源码阅读(13):Java中主要的Queue、De

2020-11-08 12:01:59 411 3

原创 阻塞队列BlockingQueue数组和链表的实现

目录阻塞队列抽象接口BlockingQueue数组阻塞队列ArrayBlockingQueue链表阻塞队列LinkedBlockingQueue在并发多线程之Lock及ReentrantLock源码剖析中了解了独占锁的实现ReentrantLock及Condition的原理和使用,接下来就来了解一下基于ReentrantLock和Condition实现的阻塞队列,本篇主要讲解的是数组和链表实现阻塞队列。首先队列的特性大家都知道是“先进先出”,那么实现先进先出的队列数据结构可以使用数组或者链表,链表一般能都

2020-11-05 18:25:05 533 2

原创 CountDownLatch源码剖析

目录AQS中共享锁的实现AQS中共享锁相关的方法CountDownLatch原理浅析CountDownLatch源码剖析在并发多线程之AQS源码分析(上)和并发多线程之AQS源码分析(下)中分析了AQS的独占锁下的方法。当然AQS也提供了共享锁的实现。接下来就先简单分析一下AQS中关于共享锁的实现原理流程及AQS源码,然后再剖析一下基于AQS实现的共享锁CountDownLatch。AQS中共享锁的实现在AQS对线程的调用阻塞时通过同步队列实现的,将阻塞的线程添加至同步队列中,当满足条件时则从队列中唤

2020-11-03 14:33:22 179 1

原创 并发多线程之Lock及ReentrantLock源码剖析

目录Lock及ReentrantLock提供的功能Lock接口提供的方法ReentrantLock的实现在并发多线程之AQS源码分析(上)和并发多线程之AQS源码分析(下)已经对JUC中的AQS源码进行了剖析梳理,AQS可以说是juc包下所有工具的基础框架,其提供了两种队列:同步队列和条件队列。并且控制了资源的获取和释放,以及线程的阻塞和唤醒调度。那么接下来就是学习一下juc包下各个工具是怎么基于AQS来实现的,这里先从Lock及其实现类ReentrantLock开始。关于Lock及ReentrantLo

2020-10-31 13:54:28 315

原创 并发多线程之AQS源码分析(下)

目录AQS实现线程通信原理相关类源码分析在上一篇并发多线程之AQS源码分析(上)中介绍了关于独占锁相关的方法,本篇来介绍AQS实现线程间通信Condition及ConditionObject等相关的源码分析。当然在梳理之前我们先把原理搞懂可以起到事半功倍的效果。AQS实现线程通信原理关于条件队列在AQS中线程间通信是通过引入条件队列来实现,条件队列在前面已经介绍,条件队列是一个单向的链表结构。如下:AQS通过引入条件队列,在线程不满足运行条件时,将线程添加至条件队列中并阻塞,当其他线程通过唤醒方

2020-10-30 18:04:01 183

原创 并发多线程之AQS源码分析(上)

目录AQS的实现原理AQS的队列实现NodeAQS的核心属性和方法在JUC原理一篇了解了JUC的都是围绕着AbstractQueuedSynchronizer(简称AQS)实现的,也就是说AbstractQueuedSynchronizer为JUC的核心,本篇就是探索AbstractQueuedSynchronizer的源码。AQS的实现原理在开始阅读源码之前再来梳理一下JUC的原理,那么在阅读源码时可以提高效率。AQS的两个队列在AQS中存在两个队列用于对线程的状态保存和记录,分别是同步队列和条

2020-10-29 16:06:11 277 2

原创 并发多线程之JUC原理

目录AQS主要属性及主要方法在了解了java内置锁(synchronized)之后,我们来了解下自1.5之后java在java.util.concurrent包中提供的并发工具类,大多数同步器实现都是围绕着共同的基础行为,比如等待队列、条件队列、独占获取、共享获取等,而这个行为的抽象就是基于AbstractQueuedSynchronizer简称AQS,AQS定义了一套多线程访问共享资源的同步器框架,是一个依赖状态(state)的同步器。AQS具有以下特性:阻塞等待队列共享/独占公平/非公平

2020-10-25 12:47:13 266 2

原创 并发多线程之sychronized

目录对象内存布局synchronized底层原理Jvm内置锁的优化偏向锁和轻量级锁的应用场景锁的膨胀升级过程设计同步器的意义 :多线程编程中,有可能会出现多个线程同时访问同一个共享、可变资源的情况,这个资源我们称之其为临界资源;这种资源可能是:对象、变量、文件等。共享:资源可以由多个线程同时访问。可变:资源可以在其生命周期内被修改。引出的问题:由于线程执行的过程是不可控的,所以需要采用同步机制来协同对对象可变状态的访问那么我们怎么解决线程并发安全问题?实际上,所有的并发模式在解决线程安

2020-10-25 11:21:17 138

原创 并发编程之volatile关键字

目录volatile的内存语义volatile的可见性volatile的禁止重排优化总线风暴引入synchronizedvolatile的内存语义volatile是Java虚拟机提供的轻量级的同步机制。volatile关键字有如下两个作用 保证被volatile修饰的共享变量对所有线程总数可见的,也就是当一个线程修改了一 个被volatile修饰共享变量的值,新值总是可以被其他线程立即得知。禁止指令重排序优化。volatile的可见性在JMM的介绍时已经提到,volatile是通过缓刑一致性协议实

2020-10-24 15:52:08 150

原创 Java的内存模型JMM

标题什么是JMM内存模型JMM内存模型定义的8种操作JMM的原子性JMM的可见性JMM的有序性总结什么是JMM内存模型Java内存模型描述的是一组规则,通过这组规则控制程序中各个变量在共享数据区域和私有数据区域的访问方式,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。从而脱离于操作系统的硬件模型,可以看到JMM内存模型与计算机的硬件有很多相似之处;计算机模型:JMM内存模型:通过制定这个规则,每个JVM实现都遵循这一规则,从而可以使java实现“一次

2020-10-24 15:38:18 109

原创 并发多线程之线程

目录用户线程和内核线程Java使用的线程JVM中线程的创建new java.lang.Thread().start()使用JNI将一个native thread attach到JVM中Java中实现线程的方式线程的生命周期线程上下文切换及死锁线程上下文切换死锁什么是线程?现代操作系统在运行一个程序时,会为其创建一个进程。例如,启动一个Java程序,操作系统就会创建一个Java进程。现代操作系统调度CPU的最小单元是线程,也叫轻量级进程(Light Weight Process),在一个进程里可以创建多个

2020-10-22 22:39:59 257

原创 缓存一致性协议:MESI

目录缓存一致性问题缓存一致性协议四种状态缓存一致性协议(MESI)流程缓存一致性协议失效总线风暴问题缓存一致性问题在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存 (MainMemory)。基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是 也引入了新的问题:缓存一致性(CacheCoherence)。当多个处理器的运算任务都涉及同一 块主内存区域时,将可能导致各自的缓存数据不一致的情况,如果真的发生这种情况,那同步回到主内存时以谁的缓存数据为准呢?为了解决一致性的问题

2020-10-22 18:41:47 332

原创 volatile禁止重排序的原理-内存屏障

目录JMM中volitile内存语义的实现volitile写的内存屏障volitile读的内存屏障内存屏障的优化内存屏障手动添加程序中,为了更高效的执行,会对代码或者指令进行重排序,在java中程序运行过程中可能会发生以下情况的重排序:编译器优化重排序;指令级并行重排序;内存系统重排序;为了实现volatile内存语义,JMM会分别限制这两种类型的重排序类型。 下图是JMM针对编译器制定的volatile重排序规则表。举例来说:第三行最后一个单元格的意思是:在程序中,当第一个操作为普通

2020-10-22 17:30:25 3132 6

原创 Mysql优化六:Mysql的锁和事务隔离级别

目录Mysql中的锁锁定义锁分类表锁表锁之读锁表锁之写锁表锁总结行锁行锁支持的事务事务隔离级别行锁展示读未提交读已提交可重复读串行化间隙锁解决幻读无索引行锁会升级为表锁行锁分析死锁优化建议Mysql中的锁锁定义锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。锁分类从性能上

2020-10-10 11:02:39 108

原创 Mysql优化五:trace工具使用及排序、分组和分页查询优化

目录trace工具的使用排序和分组优化demo1demo2demo3demo4demo5demo6demo7demo8排序优化总结文件排序(filesort)原理详解文件排序方式分类文件排序方式的选择文件排序方式示例分页查询优化根据自增且连续的主键排序的分页查询根据非主键字段排序的分页查询trace工具的使用Mysql如何合适的选择素引呢?接下来我们来看一个示例。EXPLAIN SELECT * FROM employees WHERE name > 'a';从上述的直接结果可以知道,在查

2020-10-09 14:40:20 263

原创 Mysql优化四:关联、count、in及exist优化

目录join关联查询优化Nested-Loop Join 算法基于块的嵌套循环连接 Block Nested-Loop Join(BNL)算法关联查询总结in和exist优化count的优化join关联查询优化接下来通过实例来了解一下join关联查询的运行原理及优化的思路。首先来看一下两个示例表的结构:t1表的结构如下:DROP TABLE IF EXISTS `t1`;CREATE TABLE `t1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a

2020-09-30 10:59:52 2010

原创 Mysql优化三:索引的使用规则和注意事项

条目全值匹配最左前缀法则不在索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描存储引擎不能使用索引中范围条件右边的列尽量使用覆盖索引(只访问索引的查询(索引列包含查询列)),减少select *语句mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描is null,is not null 也无法使用索引like以通配符开头('$abc...')mysql索引失效会变成全表扫描操作字符串不加单引号索引失效少用or或in,用它查询时,非主键字段

2020-09-27 11:15:49 151

原创 Mysql优化二:Explain工具列介绍

目录id列select_type列table列type列possible_keys列key列key_len列ref列rows列Extra列使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返 回执行计划的信息,而不是执行这条SQL 。注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中。在查询中的每个表会输出一行,如果有两个表通过 join

2020-09-24 16:59:43 122

原创 Mysql优化一:Mysql索引原理

目录索引的概念索引的各种实现及优缺点Mysql中存储引擎的索引实现联合索引数据结构索引的概念索引是帮助MySQL高效获取数据的排好序的数据结构。所以说索引是一种数据结构,用于帮助Mysqll高效查询的数据结构,就像是我们常提到的数组、链表等。如下图所示,索引就像平常使用字典查询一样:索引的各种实现及优缺点可以实现的高效查询的数据结构有以下几种:二叉树红黑树Hash表B-Tree接下来来逐个了解一下上述各个数据结构的优缺点,在介绍之前,先介绍个网页,该网页可以帮助学习数据结构和算法

2020-09-24 11:08:38 255

原创 ThreadLocal之源码剖析

目录ThreadLocal介绍、示例和原理简单示例ThreadLocal的原理ThreadLocal源码剖析ThreadLocalMap源码分析ThreadLocalMap中元素Entry的实现ThreadLocalMap各个全局属性剖析ThreadLocalMap方法剖析ThreadLocal源码剖析ThreadLocal属性剖析ThreadLocal各个方法剖析ThreadLocal介绍、示例和原理ThreadLocal为线程提供了私有变量保存的方式,每一个线程通过ThreadLocal只能访问自己

2020-09-18 18:29:06 164 1

原创 深入JVM十一:JVM常见调优工具

这里写目录标题jmap的使用histo参数的使用heap参数的使用堆内存dumpjinfo的使用flags 参数的使用sysprops参数的使用jstat的使用垃圾回收统计堆内存统计年轻代垃圾回收统计新生代内存统计老年代垃圾回收统计老年代内存统计元空间内存统计jstack的使用jstack定位死锁问题使用jstack找出占用cpu最高的线程jstack展示的线程状态JVM运行情况评估jmap的使用jmap主要用来观察运行的JVM进程的内存情况及内存快照生成,这里只要说明其中的几个参数:histo

2020-09-16 13:47:51 1148

原创 深入JVM十:JVM中的垃圾收集器

标题Serial收集器ParNew垃圾收集器Parallel Scavenge垃圾收集器CMS垃圾收集器Garbage First(G1)垃圾收集器G1对堆内存的划分G1 垃圾收集器的收集过程GC 垃圾收集器的特征G1垃圾收集器的垃圾收集分类G1垃圾收集器常见JVM参数G1垃圾收集器的建议如何选择垃圾收集器如果说垃圾收集算法是垃圾收集的理论的话,那么垃圾收集器就是垃圾收集理论的实现,接下来来分别了解Serial、ParNew、Parallel Scavenge、CMS、G1等垃圾收集器。Serial收集

2020-09-12 21:15:09 118

原创 深入JVM九:对象的回收判断和垃圾收集算法

这里写目录标题如何判断对象可以回收引用计数法可达性分析算法JVM中的常见引用类型finalize最终判定对象是否存活如何判断一个类是无用类垃圾收集算法标记清除算法标记复制算法标记整理算法分代收集理论如何判断对象可以回收堆中几乎放着所有的对象实例,对堆垃圾回收前的第一步就是要判断哪些对象已经死亡(即不能再被任何途径使用的对象)。 那么判断对象是否死亡该如何判断,有引用计数法和可达性分析两种策略。引用计数法给对象中添加一个引用计数器,每当有一个地方引用它,计数器就加1,当引用 失效,计数器就减1,任何时

2020-09-10 12:32:13 188

原创 深入JVM八:JVM内存分配机制

标题对象优先在Eden区分配大对象直接进入老年代长期存活的对象进入老年代对象动态年龄判断Minor GC后存活的对象Survivor区放不下老年代空间分配担保机制在了解JVM内存分配的机制之前先来了解一下关于垃圾回收的几个术语:Minor GC/Young GC:指发生新生代的的垃圾收集动作,Minor GC非常频繁,回收速度一般也比较快。Major GC/Full GC:一般会回收老年代,年轻代,方法区的垃圾,Major GC的速度一般会比Minor GC的慢10倍以上。接下来来了解一下JVM

2020-09-09 16:43:16 400

原创 深入JVM七:逃逸分析对对象分配的优化

目录栈上分配标量替换在了解逃逸分析之前我们先来了解一下JVM的即时编译器,即时编译器的工作流程原理如下:Java程序最初运行时通过解析器进行解释执行的,当虚拟机发现某个方法或代码块运行的特别频繁,就会把这些代码认定为“热点代码”,为了提高热点代码的执行效率,在运行时,虚拟机会将这些“热点代码”编译成本地机器吗,并且通过各种手段对代码进行各种的优化。那么在运行期间完成上述功能的就是即时编译器。需要注意的是,这里的编译不是将.java文件编译成字节码文件,而是将字节码编译成中间码或者本地机器码。解析器也是解

2020-09-08 12:21:06 168

原创 JDK动态代理原理剖析(下)

在JDK动态代理原理剖析(上)中对JDK动态代理的原理机制和自定义代理类生成进行了学习,接下来就来研究一下JDK的动态代理是怎么实现的,梳理梳理一下其源码。在开始研究源码之前,先把其实现思路以及实现方法进行梳理一下,在梳理源码时可以起到很好的作用。首先为了提高性能,JDK动态代理使用了缓存,在Proxy中声明如下:/** * a cache of proxy classes */private static final WeakCache<ClassLoader, Class<?&g

2020-08-28 16:31:24 253

原创 JDK动态代理原理剖析(上)

目录JDK动态代理示例原理剖析实现自己的ProxyJDK动态代理示例首先从一个常见的JDK动态代理示例来开始:代理目标接口:/** * @Description: 代理目标接口 * @Author: binga * @Date: 2020/8/25 10:19 * @Blog: https://blog.csdn.net/pang5356 */public interface TargetInterface { void doSomething();}实现类如下:/**

2020-08-27 18:31:19 208

原创 深入JVM六:对象内存分配和对象内存布局

目录对象创建流程对象内存布局指针压缩对象创建流程在代码中,通过new创建新的对象时会经过如下几个流程:类是否加载当遇到new的字节码指令时,会检查创建实例所属的类是否加载,主要是通过当前类的常量池中的符号引用来确定需要加载的类,如果类未加载则加载指定的类。分配内存从堆内存中为要创建的对象分配内存。内存分配有两种方法:指针碰撞(Bump the Pointer):如果Java的堆内存时规整的,已经分配 的空间在一遍,未分配的空间在另外一遍,中间则使用一个指示器用于划分 已分配空间

2020-08-27 15:45:09 243

原创 深入JVM五:各个内存区域OOM示例

这里写目录标题堆内存的溢出栈内存溢出元空间内存溢出在测试JVM每个内存区域的内存溢出异常(OutOfMemoryError)之前,先来了解几个关于指定JVM内存区域的JVM参数:-Xms 和-Xmx : -Xms用于指定JVM运行时堆的初始化空间大小,而-Xmx用于指定JVM运行时堆的最大空间,当两个参数不一样时,在JVM启动时会将空间大小指定为-Xms指定的值,当空间不足时会扩展堆空间,直至堆空间达到-Xmx参数指定的大小。如果不想堆空间在运行时动态扩展,可将-Xms和-Xmx指定大小相同。-X

2020-08-26 23:41:53 420 1

原创 深入JVM四:JVM运行时内存区域剖析

目录JVM运行时区域程序计数器栈(线程)局部变量表和操作数栈方法出口动态链接本地方法栈方法区堆内存JVM运行时区域JVM在执行Java程序的过程中会把他所管理的内存划分成不同的数据区,这些数据区都有各自的的用途,以及创建和销毁的时间,有的区域锁着JVM进程的启动而存在。有些区域则依赖用户线程的启动和结束从而建立和销毁。JVM的运行时数据区和JVM其他组件的之间的关系如下:上图是基于《深入理解Java虚拟机》的图画的,说明了运行时数据区在JVM中的作用。基于对JVM运行时数据区的理解,基于上图的修饰

2020-08-21 17:22:45 275

原创 深入JVM三:类加载时机之被动引用

在JVM类加载过程中说明了类在何时出发加载,但是在平常的认知中对一些觉得会触发类加载的情况,其实是不会触发类的加载的,这中情况被称之为被动引用,接下来通过几个实例来看一下被动引用的几个示例。示例1通过子类引用父类的静态变量不会触发子类的初始化:class SuperClass { static { System.out.println("super class init"); } public static int age = 8;}class Sub

2020-08-18 22:36:35 169 1

原创 设计模式之责任链模式

目录责任链模式的介绍责任量模式实例责任链模式的优缺点责任链模式在源码中的应用责任链模式的介绍责任链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式的使用场景:有多个对象可以处理一个请求,哪个对象处理该请求运行时自动确定。在不明确指定接收者的情况下,向多个对象中的一个提交一个请求。可处理一个请求的对象集合应该被动态指定。责任链模式的结构:责任链模式的角色说明:Handler

2020-08-17 11:54:28 157

原创 设计模式之观察者模式

目录观察者模式介绍观察者模式实例观察者模式的优缺点观察者模式在源码中的应用观察者模式介绍观察者模式:定义对象间的一对多依赖关系,当一个对象的状态发生改变是,所有依赖于他的对象都得到通知并被自动更新。观察者模式的适用场景:一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这二者封装在独立的对象中,使他们可以相互独立的改变和和复用。对一个对象的改变需要同时改变其他对象,而不知道具体有多少对象有待改变。一个对象必须通知其他对象,而它又不能假定其他对象是谁,换言之,你不希望这些对象是紧耦合的。

2020-08-16 11:51:08 103

原创 设计模式之模板方法模式

目录模板方法模式的介绍模板方法示例模板方法模式的优缺点模板方法模式在源码中的使用模板方法模式的介绍模板方法的定义:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类在不改变一个算法的结构即可重新定义该算法的某些特定步骤。我们考虑这么一种场景,假设我们需要读取文件,然后将读取出来的数据转换成实体类并存入数据库,然而文件的格式是不同的,有如下:binga@18@Beijing@[email protected]@20|Shanghai@[email protected]@

2020-08-15 13:44:19 119

原创 设计模式之策略模式

目录策略模式的定义和介绍策略模式示例策略模式的优缺点策略模式在源码中的使用策略模式的定义和介绍策略模式:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。从模式定义来看,策略模式着重的是对算法的分装以及调用,而不是注重算法的实现。策略模式的使用场景:许多相关的类仅仅是行为有异。 “策略”提供了一种用多个行为中的一个行为来配置一个类的方法。即一个系统需要动态地在几种算法中选择一种。需要使用一个算法的不同变体。例如,你可能会定

2020-08-14 14:25:48 99

原创 设计模式之装饰者模式

这里写目录标题装饰模式介绍和结构装饰者模式示例代码装饰者模式的优点和缺点装饰模式介绍和结构装饰者模式:动态的给一个对象添加一些额外的职责。装饰者模式的使用场景:在不影响其他对象的情况下,以动态、透明的方法给单个对象添加职责。处理那些可以撤销的职责。(所有的职责均不可撤销的话则使用继承可以更好的进行扩展)。当不能使用生成子类的方法进行扩充时。这一般包含两种情况。一种情况是可能有大量独立扩展、为支持每一种组合而需要产生大量子类,使得子类数目呈爆炸式增长。另一种情况就是,类定义被隐藏或者类被定义为不

2020-08-12 22:06:47 136

原创 设计模式之适配器模式

这里写目录标题适配器模式的介绍和定义适配器模式结构和实现类适配器模式对象适配器模式适配器模式的优缺点对象适配器模式类适配器模式对象适配器模式适配器模式源码中的应用适配器模式的介绍和定义适配器模式,即定义一个包装类,用于包装不兼容接口的对象,从而使原本由于接口不兼容而不能一起工作的那些类可以在一起工作。适配器模式具有两种:类适配器模式;对象适配器模式;适配器模式的应用场景:当你希望使用某些现有的类,但其接口与您的其他代码不兼容是,请使用适配器类。当你希望重用几个现有的子类,这些子类缺少一

2020-08-12 14:50:06 116

原创 深入JVM二:类加载器和双亲委派机制

目录类加载器的分类Java中各个类加载器的层次关系自定义类加载器双亲委派机制双亲委派流程双亲委派机制源码剖析打破双亲委派在上面了解了类的加载过程,那么类的加载是如何实现的呢?答案是通过类加载器进行加载的,jvm中类加载也是一个普通的类,但是在jvm中针对不同的jar包或者class由不同的类加载器进行加载,jvm中存在多种类加载器,接下来了解jvm中的各个类加载器。类加载器的分类Java里有如下几种类加载器启动类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的核心类库比如 rt.jar、

2020-08-10 15:18:19 262

mysql优化join关联示例表

mysql优化join关联示例表

2020-09-29

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除