自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 收藏
  • 关注

原创 JUC——AQS部分疑问及解答

当然了,上面也只是理想情况下的操作,如果出现了极端情况,也是会从尾节点遍历进行节点检查(例如:某节点next为null或者为已取消节点,那么此时无法唤醒next指向的节点,只能通过tail尾节点来向上遍历,找到最近的一个正常节点。(引申:队列是可能出现暂时性分叉的,假设在并发的极端情况下,多个线程都执行了上述步骤1,此时多个节点指向prev,但只有一个节点能成功执行步骤2,其他线程会继续循环,直至入队成功。从问题1可知,节点是会先更新节点的prev指针,然后再CAS更新尾节点。英文好的也可以去看看。

2023-02-21 17:19:07 134

原创 JUC——Lock详解

Lock是一种用于控制多个线程对共享资源访问的工具。通常情况下,锁提供对共享资源的独占访问(独占锁,即一次只有一个线程能获取锁),并且对共享资源的所有访问都必须先获取到锁。但是,有些锁也可能允许对共享资源的并发访问(共享锁,例如ReadWriteLock中的读锁)。

2023-02-20 16:05:51 285

原创 JUC——AQS源码解析

该篇主要以分析AQS的源码为主,从源码来看AQS是如何实现在独占模式和共享模式下的加锁、释放锁的逻辑。

2023-02-17 12:10:38 181

原创 AQS共享模式setHeadAndPropagate方法及doReleaseShared方法详解

PROPAGETE状态是为了防止极端情况下,释放锁的线程无法唤醒后继节点,让获取锁的线程能把唤醒操作继续下去获取锁的线程和释放锁的线程,同一时刻只有一个线程能去唤醒头节点的后继节点,其他线程会跳出循环不做操作,当然如果线程还未跳出循环时,头节点就发生了变化,那么这些线程会再次争夺执行唤醒操作的机会一个头节点的后继节点只会被唤醒一次。

2023-02-15 18:52:06 600 1

原创 JUC——AQS实现原理

AQS的全称为AbstractQueuedSynchronizer,也就是抽象队列同步器,位于java.util.concurrent.locks包下它是一个抽象类,本身已经提供了许多的基础功能,我们可以通过继承它来很方便的实现自定义的同步器个人理解,简单来讲,AQS本质就是个用来实现资源同步器的基础组件。在资源空闲时,允许线程去获取它,且在成功后将资源设置为被占用的状态;在资源被占用时,提供一定的阻塞等待唤醒机制来保证资源的后续分配。

2023-02-01 17:45:12 247

原创 AQS实现原理——Node节点

在介绍AQS之前,我们需要先来了解下Node节点类。AQS中的核心同步队列(CLH队列的变体)以及条件队列都是依靠Node节点来实现的。在线程没有竞争到锁资源时,会将线程信息包装成一个Node节点数据,该节点不仅记录了线程信息,还记录了线程的等待状态以及上下节点。

2023-01-10 18:24:38 434

原创 Spring5.3.x源码编译记录

1.spring-aspects问题当时最开始导入spring源码,然后直接去编译,总是会报出这个异常,而且由于我之前一直使用maven,未接触过gradle,网上也未搜到相关解决方案,所以当时这个问题还是很棘手的最开始是怀疑gradle版本不兼容,然后更换过很多版本号,包括网上编译spring5.3.x教程使用的6.8.3,可是都没有效果。也怀疑是不是jdk版本过低,然后将jdk从1.8更新至11,不过还是没有效果解决方案一:排除编译spring-aspects模块,

2022-11-23 14:09:11 506 1

原创 SpringCloud Alibaba整合gateway踩坑之路

而是将parent父级中的引用都放入dependencyManagement标签中用来管理依赖,子项目根据需要来自行选择需要引用哪些依赖,这样就解决了冲突,也成功启动了gateway网关服务。此时,一个猝不及防的报错又给我拌了个跟头,看描述信息应该是springmvc与gateway网关冲突。那么事实就显而易见了,是某个jar引用了高版本的springboot,接下来就是排查了。不得不说,网上的答案有用的信息太少了,而且都是复制粘贴的几遍,都快把心态搞崩了。压制了下心中的躁郁,我一头扎进了搜索引擎。...

2022-08-05 12:24:33 891

原创 nacos服务注册

如果出现java.lang.NoClassDefFoundErrororg/springframework/boot/Bootstrapper异常,则说明选用的springBoot版本跟springCloudAlibaba版本不匹配,可查询兼容版本更改。如果出现java.net.UnknownHostExceptionjmenv.tbsite.net错误,是因为nacos默认使用集群模式启动。执行startup.cmd文件启动nacos服务端项目。成功启动项目后,该服务就会注册到nacos中了。......

2022-08-01 15:52:44 299

原创 Redis数据类型及编码格式——Hash篇

概述要了解redis中hash数据类型底层使用的编码格式,首先得了解ziplist、hashtable这两种编码格式ziplistziplist(压缩列表)是一个经过特殊编码的双向链表,用于存储字符串或整数,可以提高存储效率。与普通双向链表的对比内存开销不同,普通双向链表的元素一般需要两个指针,这会占用额外的内存,在数据较小的情况下,可能指针对于内存的占用比数据还大,有点得不偿失。而ziplist压缩列表,是一块连续的内存,数据之间紧密相连,不需要指针这种额外的开销。 遍历速度不同,普

2022-02-22 18:32:16 2955

原创 Redis数据类型及编码格式——介绍及String篇

Redis核心对象reids中定义了一个数据结构用来统一表示各种数据类型,它叫做redisObjecttypedef struct redisObject { unsigned type:4; //记录数据值的类型:string、list、hash、set、zset unsigned encoding:4; //记录数据值的编码格式 unsigned lru:LRU_BITS; //记录操作时间,当redis内存超限时,该值可辅助lru算法清理数据 i

2022-02-18 18:36:12 3706

原创 windows下更换JDK无效问题

今天下载openjdk11后,配置了JAVA_HOME、ClassPath及Path,结果java -version发现还是原来版本的jdk1.8,配置未生效。首先在命令行执行where java发现最上层是C:\ProgramData\Oracle\Java\javapath\java.exe,之后是C:\Windows\Sys32\java.exe,自己配置的路径在后面去看了PATH环境变量才知道,它默认将这几个变量放前面了,所以java -version会调用到上面的ja

2022-01-12 16:13:26 1005

原创 github+jenkins持续集成

1.安装jdk2.安装jenkins添加依赖源wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat-stable/jenkins.reporpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.key安装jenkinsyum install jenkins如果出现以下错误通过添加--nogpgcheck参数跳过公钥验证y.

2021-12-14 17:27:46 1288

原创 HSDB的使用

jdk中额外提供了很多工具,其中HSDB就是一款可用于调试jvm运行时数据的图形化工具,存在于jdk目录lib文件夹下的sa-jdi.jar中启动方式如果出现加载sawindbg.dll失败,那么可以去jdk目录下的jre\bin文件夹下找到该文件复制到jre目录编写测试用例该测试代码为深入理解Java虚拟机书中的例子package com.jvm;public class HsdbTest { static class Test { stati..

2021-11-16 16:56:50 799

原创 arthas使用

arthas是阿里巴巴一款JAVA线上诊断工具。无需重启服务即可快速定位排查问题。下载及启动:curl -O https://arthas.aliyun.com/arthas-boot.jarjava -jar archas-boot.jar启动成功后就会列出Java程序进程,输入对应序号就可追踪到该进程上输入dashboard命令,则可以查看进程信息 ID: Java级别的线程ID,注意这个ID不能跟jstack中的nativeID一一对应。 NAME: 线..

2021-10-22 15:35:37 484

空空如也

空空如也

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

TA关注的人

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