- 博客(12)
- 收藏
- 关注
原创 一文搞懂Mysql的锁问题
当innodb_autoinc_lock_mode=1时,在语句复制格式下(BINLOG_FORMAT=STATEMENT),BINLOG中没有记录主库执行过程中获取到的所有自增值及其对应行的信息,要保证"Bulk insert"操作主从复制数据一致就必须保证语句在主库和从库执行时获取到相同自增值,而因此只能通过控制“获取连续自增值”的方式来实现,同时为避免受其他事务插入操作影响,就必须在表级别加锁且保证持有锁至语句结束。最近遇到一个mysql的唯一索引的死锁问题, 记录一下顺便复习一下锁相关的知识。
2024-03-19 10:36:28
1127
1
原创 ribbon服务列表和nacos服务列表不一致的问题
背景在学习ribbon和nacos的时候,发现当手动把服务实例下线后,nacos的服务列表已更新,但是ribbon拉取的服务列表还未更新,为了解决这个问题,我们先来了解一下他们各自的服务更新机制问题解析首先大家先思考两个问题:1,nacos是怎么拉取服务的?2,ribbon是怎么拉取服务的?在这里先明确一下:这里的拉取服务实例是一个懒加载的过程,也就是说在第一次请求的时候才会去拉取服务实例首先我们先来看下ribbon是怎么拉取服务实例的//这里是LoadBalancerFeignCli
2022-04-28 17:40:21
1842
9
原创 Feign的原理及源码解析
前言本篇内容着重讲述Feign的调用源码,不阐述基本概念版本使用:spring-cloud-openfeign:2.2.8.RELEASEspringBoot:2.3.12.RELEASE使用示例在springBoot项目中,大家一般都是这么使用Feign的①启动类贴注解@SpringBootApplication@EnableFeignClientspublic class SkillBizApplication { public static void main(String[]
2022-03-31 17:40:07
1389
原创 并发编程-ThreadLocal原理解析及内存泄露问题
ThreadLoccal基本介绍应用场景分析源码解析存在的坑和注意事项总结基本介绍什么是ThreadLocal?首先我们引用下ThreadLocal的源码注释This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one has its own, independently initializ
2021-11-11 19:14:55
547
原创 并发编程-读写锁ReentranReadWriteLock应用场景及源码解析
目录前言读写锁介绍什么是读写锁特性具体实现前言假设你现在需要实现这样一个需求给你一个Map集合(共享资源),实现如下需求可以允许两个线程同时调用Map的get方法读取数据不允许两个线程同时调用Map的put方法修改数据不允许两个线程一个调用put方法,一个调用get方法,也就是说当一个线程调用put方法时,另一个想调用get方法的线程需要阻塞等put方法完成你会如何实现?这里可能会有同学想到用ConcurentHashMap,确实ConcurentHashMap可以满足第一点和第二点
2021-11-08 17:27:39
679
原创 并发编程-Condition实现阻塞队列及源码解析
目录前言实践源码解析前言上篇文章我们使用了wait¬ify实现阻塞队列实现了一个阻塞队列,今天我们来看看如何用ReentrantLock的Condition对象来实现阻塞队列实践public static void main(String[] args) { ConditionQueue conditionQueue = new ConditionQueue(5); for (int i = 0; i < 10; i++) {
2021-11-01 17:30:03
224
1
原创 并发编程-LockSupport和wait¬ify的区别
目录LcokSupport定义常用的方法和基本原理了解应用LcokSupport定义LockSupport是一个在JUC包里的线程阻塞工具类,所有的方法都是静态方法,主要用途是让线程在任意位置阻塞,广泛应用在AQS和各种JUC的锁中常用的方法和基本原理了解public static void park(Object blocker); // 暂停当前线程public static void parkNanos(Object blocker, long nanos); // 暂停当前线程,不过
2021-10-19 16:40:15
755
原创 并发编程-ReentrantLock加锁解锁源码详细解析
这里写自定义目录标题AQS**加锁源码**新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入AQS当我们构造一个ReentrantLock对象的时候,可以通过传入一个布尔值来指定公平锁还是非公平锁,进入源码可以发现区别是n
2021-10-14 18:40:40
699
2
原创 线程池执行原理解析和参数设置
前言上一篇文章我们解决了父子线程数据传递的问题线程池中父子线程传递信息的问题但是文章所用线程池设置的拒绝策略会导致在任务过多的情况下取出的用户信息依然为空,这个是为什么呢?该怎么解决呢?下面我们可以通过源码来分析一下原理原理首先我们先来回顾下自定义线程池时的拒绝策略当线程池的任务队列满了之后(一般都是有界队列), 并且线程数也已经达到了最大线程数,此时就会执行拒绝策略目前JDK提供了四种拒绝策略AbortPolicy: 丢弃任务,并抛出 RejectedExecutionExcep
2021-09-29 16:20:29
238
原创 线程池中父子线程数据传递的问题
使用线程池执行任务时,子线程也需要获取用户信息,因为我们使用的是spring的security框架,取出用户信息的方法如下: User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 子线程调用以上方法取出的user信息为null,为什么为null,看下源码发现用户信息是从当前线程的threadlocal中取的,只有主线程设置过user信息//SecurityContextH
2021-09-26 18:24:51
944
原创 Stream的Collectors.groupingBy支持key为null
Stream的Collectors.groupingBy支持key为null进行分组场景在使用Collectors.groupingBy分组时,如果分组的字段中有值为null,会抛出空指针异常例如:// An highlighted blockcalss User{ private Integer age; private String sex;}public static void main(String[] args){ User user1 = new User(18, "女")
2020-09-01 16:59:17
19054
2
转载 CentOs7安装chrome点击无响应的问题
CentOS7安装chrome以及点击无响应的问题下载rpm包下载地址:https://www.google.cn/chrome/我下的这个:google-chrome-stable_current_x86_64.rpm安装依赖包(一定要安装依赖)ps:我之前就是挂在了这里yum install -y lsbyum install -y libXScrnSaveryum inst...
2019-06-26 14:48:28
1167
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人