java并发
当时的那个女孩
这个作者很懒,什么都没留下…
展开
-
对volatile的理解
本文转自:石杉的架构笔记首先我们先看一个图:这张图说的是java内存模型中,每个线程有自己的工作内存,同时还有一个共享的主内存.举个例子,比如说有两个线程,他们的代码里都需要data这个变量的值,那么他们都会从主内存里加载data变量的值到自己的工作内存,然后才可以使用那个值.使用工作内存的理由:线程运行的代码对应的是一些指令,是由CPU执行的.但是CPU每次执行指令运算的时候...转载 2019-10-10 15:20:11 · 102 阅读 · 0 评论 -
Java8 如何优化CAS性能
假设多个线程需要对一个变量不停地累加1:public class HelloWorld{ private int data=0; //多个线程同时对data变量执行操作: data++;}问题:多个线程直接这样并发对一个data变量进行修改,是线程不安全性的行为,会导致data值的变化不遵照预期的值来改变.加锁变成线程安全的:public class ...转载 2019-10-10 15:50:29 · 471 阅读 · 0 评论 -
对AQS的理解
本文转载自:石杉的架构笔记AQS(AbstractQueuedSynchronizer):抽象队列同步器我们先看一段代码: public void test(){ ReentrantLock lock = new ReentrantLock(); //加锁 lock.lock(); //业务逻辑代码 ...转载 2019-10-10 16:15:31 · 205 阅读 · 0 评论 -
公平锁/非公平锁
非公平锁:线程1先加锁,线程2进入等待队列,但是在线程1释放锁以及线程2加锁的这段时间内,线程3完成了加锁操作,那么线程2还要进入等待队列.这就是非公平锁,但是我们是社会主义国家啊,所以我们来看看公平锁.公平锁:如果用默认的构造函数来创建ReentrantLock对象,默认的锁策略就是非公平的。公平锁是在构造ReentrantLock对象的时候传入一个true即可:Ree...转载 2019-10-11 09:46:37 · 75 阅读 · 0 评论 -
微服务注册中心---读写锁优化
首先我们看一下服务注册中心表:这个时候就会出现多线程并发修改共享数据的问题.我们首先考虑的是加锁:我们单纯的加锁://服务注册 public synchronized void register(){ //将服务实例信息加入内存的Map数据结构中 } //读取服务注册表 public synchronized Map<St...转载 2019-10-11 10:12:23 · 368 阅读 · 0 评论 -
10倍请求压力来袭,你的系统会被击垮吗?
背景介绍:背景情况是这样:线上一个系统,在某次高峰期间MQ中间件故障的情况下,触发了降级机制,结果降级机制触发之后运行了一小会儿,突然系统就完全卡死,无法响应任何请求。给大家简单介绍一下这个系统的整体架构,这个系统简单来说就是有一个非常核心的行为,就是往MQ里写入数据,但是这个往MQ里写入的数据是非常核心及关键的,绝对不容许有丢失。所以最初就设计了一个降级机制,如果一旦MQ...转载 2019-10-11 10:30:33 · 184 阅读 · 0 评论