https://blog.csdn.net/sophia__yu/article/details/84313234 Lock是一个接口,通常会用ReentrantLock(可重入锁)来实现这个接口. 独占式获取锁 1.lock() ReentrantLock lock=new ReentrantLock(); lock.lock(); 当获取锁时通常会调用ReentrantLock的lock()方法.而lock()方法在ReentrantLock是一个抽象方法,默认情况下ReentrantLoc…
1.环境准备 使用IDEA Spring Initializr快速创建一个Spring Boot项目 添加一个Controller类 @RestController public class HelloController { @RequestMapping("hello") public String hello() { return "hello"; } } 主配置类如下 @SpringBootApplication public class Springboo…
数据结构 java.util.concurrent.locks.AbstractQueuedSynchronizer类中存在如下数据结构. // 链表结点 static final class Node {} // head指向的是一个虚拟结点,刷多了算法就知道这样做的目的是方便对链表操作,真正的头为head.next private transient volatile Node head; // 尾结点 private transient volatile Node tail; // 同步状…
了解一个项目启动如何实现是了解一个框架底层实现的一个必不可少的环节.从使用步骤来看,我们一般是引入包之后,配置web.xml文件.官方文档示例的配置如下: <web-app> <servlet> <servlet-name>example</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <…
在介绍HashMap的同时,我会把它和HashTable以及ConcurrentHashMap的区别也说一下,不过本文主要是介绍HashMap,其实它们的原理差不多,都是数组加链表的形式存储数据,另外本文所介绍的都是JDK1.8版本的.在介绍之前,先看下Map家族的继承体系图: 其中,TreeMap是基于树实现的,其他三个都是哈希表结构. HashMap和Hashtable的主要区别是: 1. Hashtable是线程安全,而HashMap则非线程安全,Hashtable的实现方法里面大部分都添…
0. 开源项目推荐 Pepper Metrics是我与同事开发的一个开源工具(https://github.com/zrbcool/pepper-metrics),其通过收集jedis/mybatis/httpservlet/dubbo/motan的运行性能统计,并暴露成prometheus等主流时序数据库兼容数据,通过grafana展示趋势.其插件化的架构也非常方便使用者扩展并集成其他开源组件. 请大家给个star,同时欢迎大家成为开发者提交PR一起完善项目. 1. 概述 不用说大家都知道Sp…
简介 ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存. ArrayList不是线程安全的,只能用在单线程环境下,多线程环境下可以考虑用Collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类. ArrayList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了…
在JDK1.6,JDK1.7中,HashMap采用位桶+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里.但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低.而JDK1.8中,HashMap采用位桶+链表+红黑树实现,当链表长度超过阈值(8)时,可能会将链表转换为红黑树,这样大大减少了查找时间. 简单说下HashMap的实现原理: 首先存在一个table数组,里面每个元素都是一个node链表,当添加一个元素(key-value)时,就首…
SpringBoot自动配置原理 前言 后面还会讲到SpringBoot自动配置原理,会主要讲解@EnableAutoConfiguratuon注解帮助我们做了什么事情,是如何自动把自动配置类扫描到容器中的,建议看完这篇后,两篇配合使用,传送门 package com.staticzz.springboot_quick; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoc…
jQuery的$方法使用起来非常的多样式,接口实在太灵活了,有点违反设计模式的原则职责单一.但是用户却非常喜欢这种方式,因为不用记那么多名称,我只要记住一个$就可以实现许多功能,这个$简直就像个万能的魔术师,想要什么就变出来.其实当我们拆穿了这个魔术的表象,你会看到一个混乱的内部,jQuery内部做了太多的事了,而能够将这个混乱一一理清,并且毫无问题的运行起来,John Resig的能力不禁让人敬佩. 下面先来看看jQuery中的$方法(又叫jQuery)的几种用途或者调用方式: 1.$(doc…