- 博客(17)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 线程安全性原理分析---Lock(让你明白彻底AQS实现原理)
ReentrantLock 的实现原理结合上篇《Lock基础分析》那么我们接下来分析下它的实现原理。我们知道锁的基本原理是:基于将多线程并行任务通过某一种机制实现线程的串行执行,从而达到线程安全性的目的。在 synchronized 中,我们分析了偏向锁、轻量级锁、乐观锁。基于乐观锁以及自旋锁来优化了 synchronized 的加锁开销,同时在重量级锁阶段,通过线程的阻塞以及唤醒来达到线程竞争...
2020-03-28 11:56:45
441
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 HashMap 源码分析
HashMap 源码分析HashMap 的内部数据结构是怎样的?答:数组+链表 具体结构如下图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6GxifWO-1584172650102)(C:\Users\86176\AppData\Roaming\Typora\typora-user-images\1582880361013.png)]验证...
2020-03-21 11:58:48
87
原创 Spring Cloud Alibaba --Nacos配置中心实现原理
通过Nacos 客户端向服务端获取 服务端的配置内容通过 反射的方式创建一个 NacosConfigService通过getConfig 获取服务器上配置的内容通过http 的方式向服务端获取远端服务的配置内容服务端通过 SpringMVC的方式提供一个Get 方法供客户端获取数据使用至此整个初次获取服务端配置信息的流程就完成了,那么大家考虑一个问题,如果服务端的数据发生变化时,客户端是是如何感知的?是通过定时的pull 还是服务端自动推送呢(push)?刚刚看上面的代码,客户端通过.
2020-06-21 11:10:47
666
原创 受检异常和非受检异常的区别
受检异常和非受检异常的区别java中异常的分类 Java.lang.Throwable 类图如下,代码如下public void checkException() throws SQLException { //必须对异常进行捕获或者抛出 ,可以对异常进行处理,比如 sql 链接关闭, throw new SQLException("sql erro"); }public void noCheckException() { //不需要对异常进行捕获或者抛出, Nul
2020-06-12 18:12:00
2098
1
原创 ConcurrentHashMap---原理分析之分而治之思想
addCount()` private final void addCount(long x, int check) { CounterCell[] as; long b, s; if ((as = counterCells) != null || !U.compareAndSwapLong(this, BASECOUNT, b = bas...
2020-06-11 20:19:10
171
原创 线程安全性原理分析---Lock(基础篇)
JUC 简介Java.util.concurrent 是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。...
2020-03-28 09:43:43
323
原创 线程安全性原理分析---Synchronized
synchronized 的基本使用:1).修饰实列方法2)修饰静态方法3)修饰代码块Syncornized 底层分析synchornized(lock)lock 锁对象中在JVM内存结构中会有一个对象头信息hostpots 源码中定义对象头如下:32位虚拟机中对象头信息结构图:synchornezed 锁的几种状态:无锁:(偏向锁>轻量级锁)重量级锁(真正意义上的加...
2020-03-23 13:50:41
150
原创 线程安全性原理分析---Volatile(硬件层面)
线程安全性原理分析Volatile 一段代码引发起我们的思考,下面这段代码 使用volatile 跟去掉有什么区别?public class App { public volatile static boolean stop = false; //加上volatile 程序运行完后,立马结束。 public static void main(String[] args)...
2020-03-22 09:41:06
432
原创 线程安全性原理分析---基础篇
多线程并发–基础篇目并发的发展历史:真空管/穿孔打点 计算机处理中会出现空闲状态。晶体管/批处理操作系统IO问题,造成CPU 资源浪费.集成电路/多道程序设计进程A(阻塞)/切换成进程B cpu 进程切换时间较短 ,对用户来说 看上去是同步进行的基于CPU时间片切换的原理图:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DEvBs92j-1...
2020-03-21 11:50:10
167
原创 ActiveMQ 原理分析—消息持久化篇
持久化消息和非持久化消息的存储原理正常情况下,非持久化消息是存储在内存中的,持久化消息是存储在文件中的。那么具体它是通过配置文件进行配置的。...
2019-06-05 17:36:04
530
原创 ActiveMQ 原理分析—消息发送篇
持久化和非持久化消息发送的策略通过setDeliveMode设置持久跟非持久属性。消息的同步发送,跟异步发送:消息的同步发送跟异步发送是针对broker 而言。在默认情况下,非持久化的消息是异步发送的。非持久化消息且非事物模式下是同步发送的。在开启事务的情况下,消息都是异步发送的。通过以下三种方式来设置异步发送: 在链接的URL 传递参数jms.useAsyncSend=...
2019-06-05 11:30:40
750
1
原创 dubbo(2.5.4) 源码分析—负载均衡篇
负载均衡背景dubbo是一个分布式服务框架,能避免单点故障和支持服务的横向扩容。一个服务通常会部署多个实例。如何从多个服务 Provider 组成的集群中挑选出一个进行调用,就涉及到一个负载均衡的策略。Dubbo内置了4种负载均衡策略:RandomLoadBalance:随机负载均衡。随机的选择一个。是Dubbo的默认负载均衡策略。RoundRobinLoadBalance:轮询负载均...
2019-05-29 16:58:16
162
原创 dubbo(2.5.4) 源码分析—服务调用篇
1. 源码入口ReferenceBean中找到afterPropertiesSet()方法getObject();由类的继承关系可以看出 public class ReferenceBean<T> extends ReferenceConfig<T> implements FactoryBean, ApplicationContextAware, Init...
2019-05-22 14:06:38
235
原创 Redis 实现分布式锁
使用 resdis 实现分布式锁1. 理解 redis SETNX命令特性首先 SETNX 是 SET if Not eXists的简写 将 key 的值设为 value,当 key 不存在 的时候表示设置成功 则返回 “1”, 否则 返回“0”,表示不做任何操作。2. 使用SETNX实现分布式锁SETNX lock.foo &amp;amp;amp;amp;lt;current Unix time +...
2019-01-18 17:19:37
239
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人