自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 资源 (4)
  • 收藏
  • 关注

原创 ReentrantLock 和 公平锁

ReentrantLock的基本使用// 一般要在一个类中定位为全局变量// 加锁逻辑一定不可以写在try内部try {count++;// 执行完输出一句话say();// 一定要在finally中增加解锁操作,否则可能会造成死锁。// 也可以再加锁,此时如果同一线程获取到锁,就是重入,holdCount会进行++操作,标识当前线程获取到锁的次数// 如果是不加锁的情况下,此时在main函数中的输出应该是 1,1try {test.say();// 输出 0。

2024-02-08 09:53:25 746

原创 synchronized 浅读解析 一

比如,单例模式中的双重检查锁,增加volatile的目的就是为了防止指令重排,以防多线程的情况下,A线程执行到了指向内存地址的步骤,B线程就获取到了锁从而导致new出了多个对象的问题,失去了单例模式的本意。synchronized的运行机制,就是当JVM检测到对象在不同的竞争状态时,会自动切换到适合的锁实现,这种切换就是锁的升级、降级。当计数器为0的时候。前25位bit位是未使用的,hashcode占了31bit,中间的1bit位是未使用的,4bit位是分代年龄,最后的3bit位是 001 表示无锁状态。

2024-02-06 21:55:11 897

原创 Volatile 浅读解析

为什么Volatile无法保证原子性对刷新主内存的过程没有锁定操作,加了Volatile后是强制不进行指令重排,但假如A线程写入,写入操作有三步,由主内存拷贝,线程副本改写,刷新主内存,在刷新主内存之前有B线程读取了主内存的数据就会导致线程安全问题,出现脏读的情况。Volatile怎么防止指令重排的在增加Volatile字段的读写操作的前后各添加一个内存屏障,来保证指令重排的时候后边的指令重排序到内存屏障之前的位置。Volatile的特性保证可见性保证有序性Volatile的缺点。

2024-02-05 23:06:18 893

原创 ThreadLocal源码分析 二

ThreadLocal的本质通过类名我们就可以得知,他是多线程本地的变量共享,但实际上它的作用并不能完全满足线程安全。假如存储的是引用类型的变量,线程安全的结论就不成立了,因为它内部存储的还是引用类型,最终的hash地址的指向依旧是同一个,假如多个线程使用了当前ThreadLocal变量里的值,并修改了内部的属性值,所有线程内的数据都会同步修改,最终的处理方法其实只有以下示例方式。@Override此处依旧是每次线程调用时都会执行一个新的对象,但优点就是方便,节省内存空间。

2024-02-04 18:43:20 857

原创 ThreadLocal源码分析 一

当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之关联的引用队列中。和HashMap不同的是当发生hash碰撞的时候它没有存成链表或红黑树,而是使用拉链法进行存储,就是同一个下标位置发生冲突时则+1向后寻址,知道找到空位置或垃圾回收位置进行存储。Java堆中每一个对象都有一个引用计数属性,引用每新增1次计数加1,引用每释放1次计数减1。如果程序发现某个虚引用已经被加入到引用队列,那么就可以在所引用的对象的。引:强引用、弱引用、软引用、虚引用。

2024-02-03 23:17:08 890

原创 Collections工具类、StringBuilder与String对比

在JVM层面,String的+号会被优化成StrinBuilder,但它是每拼接一次+号就会新new出来一个StringBuilder,创建对象的时间耗时,所以将StringBuilder提取到外层来会比直接加号拼接快很多。底层是char[] 结构,数组结构,操作基本和ArrayList一致,也是需要扩容,copy数组,只不过再toString的时候会将char[] 通过new String的方式创建出来。所以,为了避免获得锁与释放锁带来的性能损耗,所以引入锁升级,升级后不能降级。

2024-02-02 11:13:30 745

原创 ArrayList、LinkedList、Queue分析

LinkedList的头尾插入速度比较快,中间插入、删除操作比较慢,ArrayList的头插入速度较慢,尾插入速度快,原因在于:LinkedList的头尾插入操作只需要实例化对象并进行绑定操作即可,但中间插入的情况下,会出现O(n2)级别的操作,十分耗时,原因在于它不存在下标,向中间插入的时候需要进行遍历操作再绑定赋值。并且使用的是数组结构性能也不好不好。如果是头插入,LinkedList速度会更快,如果是中间插入是ArrayList快一点,如果是尾插入,是ArrayList的速度要更快。

2024-02-01 12:08:39 1054

原创 HashMap源码分析 二

增、删、遍历速度足够快,如果是数组结构它的时间复杂度会达到O(n), 但如果是树结构它的时间复杂度会是O(logn),所有的树结构目的最终都是为了达到平衡树,如果仅仅是依靠单纯的二叉树,可能会出现链表的情况,也就是无限大或无限小,导致一直向一个方向插入数据,导致出现链表结构。二叉搜索树的数据插入过程是,与当前节点做对比,小于在左大于在右,但当数据的插入顺序不同,就会出现完全不同的数据结构,可能是一颗平衡二叉树,也有可能退化成链表(插入数据一直是最大的,会一直向右侧节点增加).

2024-02-01 11:17:48 797

原创 HashMap源码学习记录

如果选择大于31的数字会导致乘积运算时数据溢出,hashCode是用int作为返回值,通过碰撞计算可以得知,31的碰撞率最小,大于31的数字乘积会超出int的范围导致丢失数据信息。为什么使用扰动函数使用扰动函数就是为了增加随机性将hash值,也就是自己的一半,为啥是16,因为int类型长度为32,向右位移16位后做计算,做异或计算的目的就是为了混合原hash值中的高位和低位,这样就增大了,计算出的值再与长度做计算。>>> 无符号位移,即全都是正整数。

2024-01-30 21:35:33 876

原创 Linux 常用命令

systemctl是CentOS7的服务管理工具中主要的工具,它融合之前service和chkconfig的功能于一体。

2024-01-24 16:38:41 346

转载 递归算法讲解

原作者:书呆子Rico 《递归的内涵与经典应用》 http://my.csdn.net/justloveyou_摘要:  大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归。毋庸置疑地,递归确实是一个奇妙的思维方式。对一些简单的递归问题,我们总是惊叹于递归描述问题的能力和编写代码的简洁,但要...

2018-04-27 11:40:16 201

原创 vue学习

从零开始学习Vue(一)引言 最近终于安定下来进了一家公司,闲了两个月再上班还有点小激动。因为公司现在的项目要求是需要进行前后端分离,所以前端也得会(为啥前端也得我们自己写啊)。前端框架用到的是Vue(为啥用vue不是用angular啊)。因为之前对这个angula4.0有所了解,所以觉得应该不会很困难。学习过程中使用的是node.js平台,ide是webstorm,所以这个应该是...

2018-04-17 13:57:25 262

原创 xml文件基本格式与解析(一)

什么是xml文件格式

2017-09-06 19:50:50 58179 2

原创 Spring 小结(二)

IOC与DIIOC(Inversion of Control):其思想是反转资源获取的方向,传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,容器适时的返回资源,* 而应用了IOC之后,则是容器主动的将资源推送给它所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源,这种行为也被称为查找的被动形式 *。DI(Dependency Injection)——IOC的另一种表达方式:即

2017-08-04 23:14:49 294

原创 Spring 小结(一)

Spring简介1.简介 Spring是一个开源框架,它由Rod Johnson创建。他是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJb完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 2.目的:解决企业应用开发的复杂性

2017-08-04 23:14:18 467

原创 Java多线程

java的多线程机制

2017-06-04 19:19:16 248

SpringBoot+ Swagger+Druid+SpringData-jpa

四个整合到一起的测试代码,使用了mysql数据库,IDEA创建项目,.idea未删除,用Idea打开时请先删除.idea文件夹,用eclipse打开时请转化为Maven项目。

2018-04-19

atom中文破解包

下载后解压直接放在C盘用户目录底下的.atom下的package文件夹下,重启就OK

2018-04-17

Activiti 5.22.0版本Demo代码

Activiti整合到Spring的Demo代码,Maven构建项目,里面包含了所有的JSON汉化包,精简pom文件,以及创建流程的测试代码,我使用的IDE是IntelliJ IDEA,使用Eclipse测试时请先将项目转换为maven项目下载jar包

2018-01-15

struts2 2.5版本的九个jar包

struts2的最新版本的必需jar包 - commons-fileupload - commons - commons-lang3 - freemarker - javassist - ognl - struts2-core - struts2-json-plugin - xwork-core

2017-09-07

空空如也

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

TA关注的人

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