![](https://img-blog.csdnimg.cn/20200119144416908.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
《WEB开发》并发编程
文章平均质量分 94
解决高并发问题
少侠露飞
Java后台开发,SSM框架,中间件,RPC
展开
-
【Java并发编程实战】(十七):Future和CompletableFuture的原理及实战——异步编程没有那么难
Future及CompletableFuture的原理及实战原创 2021-04-21 00:41:45 · 1203 阅读 · 0 评论 -
【Java并发编程实战】(十六):原子类——无锁工具类的典范
CAS无锁原理及Java原生原子类原创 2021-04-06 13:06:35 · 396 阅读 · 0 评论 -
【Java并发编程实战】(十五):CountDownLatch和CyclicBarrier——如何让多线程步调一致
CountDownLatch和CyclicBarrier实现让多线程步调一致原创 2021-04-06 11:38:07 · 342 阅读 · 0 评论 -
【Java并发编程实战】(十四):StampedLock——有没有比读写锁更快的锁
StampedLock——有没有比读写锁更快的锁原创 2021-04-05 19:59:39 · 235 阅读 · 0 评论 -
【Java并发编程实战】(十三):ReadWriteLock——如何快速实现一个完备的缓存
腾讯面试官竟然让我用读写锁快速实现一个完备的缓存原创 2021-04-05 19:57:56 · 236 阅读 · 0 评论 -
【Java并发编程实战】(十二):Semaphore——如何快速实现一个限流器
深入浅出信号量Semaphore原创 2021-04-05 12:51:33 · 252 阅读 · 0 评论 -
【Java并发编程实战】(十一):Lock和Condition
Dubbo如何用管程实现异步转同步原创 2021-04-04 20:48:52 · 583 阅读 · 1 评论 -
【Java并发编程实战】(十):如何用面向对象的思想写好并发程序
如何用面向对象的思想写好并发程序原创 2021-04-03 21:23:19 · 198 阅读 · 0 评论 -
【Java并发编程实战】(九):Java线程
Java线程原创 2021-04-02 17:05:18 · 454 阅读 · 0 评论 -
【Java并发编程实战】(八):管程——并发编程的万能钥匙
管程——并发编程的万能钥匙原创 2021-04-02 17:03:13 · 370 阅读 · 0 评论 -
【Java并发编程实战】(七):安全性、活跃性以及性能问题
安全性、活跃性以及性能问题原创 2021-04-02 15:24:34 · 274 阅读 · 0 评论 -
【Java并发编程实战】(六):用“等待-通知”机制优化循环等待
“等待-通知”机制原创 2021-04-02 15:22:30 · 277 阅读 · 0 评论 -
【Java并发编程实战】(五):死锁问题
一不小心就死锁了,可咋整?原创 2021-04-01 20:53:36 · 432 阅读 · 0 评论 -
【Java并发编程实战】(四):互斥锁——解决原子问题和保护多个资源
互斥锁的原理及使用原创 2021-04-01 20:53:14 · 256 阅读 · 0 评论 -
【Java并发编程实战】(三):Java内存模型——看Java如何解决可见性和有序性问题
Java内存模型原创 2021-04-01 20:52:51 · 305 阅读 · 0 评论 -
【Java并发编程实战】(二):并发编程Bug的源头——可见性、原子性和有序性问题
并发编程中的可见性、原子性和有序性问题原创 2021-04-01 20:52:01 · 388 阅读 · 1 评论 -
【Java并发编程实战】(一):如何才能学好并发编程
并发编程学习攻略原创 2021-04-01 20:51:41 · 308 阅读 · 0 评论 -
【Java多线程手写代码】(五):如何优雅的实现生产者、消费者
腾讯面试官让我手动实现生产者、消费者原创 2020-11-23 22:24:18 · 602 阅读 · 0 评论 -
【Java多线程手写代码】(四):字节跳动面试官让我手写代码实现启动三个线程累加数字到30
字节面试官这样考察多线程知识原创 2020-11-19 15:56:01 · 851 阅读 · 3 评论 -
【Java多线程手写代码】(三):快手面试官让我手写代码实现三个线程按序输出1 2 3 4 5, 6 7 8 9 10, 11 12 13 14 15...
三个线程按序输出1 2 3 4 5, 6 7 8 9 10, 11 12 13 14 15原创 2020-11-17 14:47:12 · 663 阅读 · 2 评论 -
【Java多线程手写代码】(二):利用多线程模拟动车票售卖
多线程模拟火车票售卖,保证一张车票不能被不同窗口重复出售原创 2020-11-16 14:12:35 · 262 阅读 · 0 评论 -
【Java多线程手写代码】(一):启动两个线程交替顺序打印奇偶数
两个线程交替打印奇偶数的问题原创 2020-11-16 11:59:18 · 1516 阅读 · 0 评论 -
Java并发编程(七):深入浅出队列同步器AQS原理及面试要点
文章目录1 AQS简介2 同步队列CLH2.1 同步状态state的维护2.2 Node节点2.3 AQS原理图2.4 入队2.5 出队3 条件队列Condition4 独占式锁4.1 独占锁的获取4.2 独占锁的释放4.3 可中断式获取锁(acquireInterruptibly方法)4.4 超时等待式获取锁(tryAcquireNanos()方法)5 共享式锁5.1 共享锁的获取(acquireShared())5.2 共享锁的释放(releaseShared())5.3 可中断(acquireShar原创 2020-06-07 18:45:29 · 772 阅读 · 0 评论 -
Java并发编程(六):volatile原理详解
文章目录volatile简介volatile的初体验volatile的实现原理和内存语义1 实现原理2 内存语义点点关注,不会迷路volatile简介之前少侠已经介绍过synchronized关键字,volatile也一样是Java中线程同步的重要机制。由JMM内存模型可知,各个线程会将共享变量从主内存中拷贝到工作内存,然后处理器会基于工作内存中的数据进行操作。线程在工作内存进行操作后何时会写到主内存中?这个时机对普通变量是没有规定的,而针对volatile修饰的变量给Java虚拟机特殊的约定,线程对v原创 2020-05-30 18:19:08 · 782 阅读 · 0 评论 -
Java并发理论(二):as-if-serial规则和happens-before规则详解
引言我们知道为了提高并行度,优化程序性能,编译器和处理器会对代码进行指令重排序。指令重排序可参看指令重排序和数据依赖性详解。但为了不改变程序的执行结果,尽可能地提高程序执行的并行度,我们需要了解as-if-serial规则和happens-before规则。as-if-serial规则as-if-serial语义的意思指:不管怎么重排序(编译器和处理器为了提高并行度),(单线程)程序的执行结果不能被改变。编译器、runtime和处理器都必须遵守as-if-serial语义。为了遵守as-if-ser原创 2020-05-29 08:31:37 · 3118 阅读 · 0 评论 -
Java并发理论(一):指令重排序与数据依赖性
文章目录1 为什么需要指令重排序?2 重排序的分类3 重排序的过程4 重排序对多线程的影响5 数据依赖性点点关注,不会迷路1 为什么需要指令重排序?现在的CPU一般采用流水线来执行指令。一个指令的执行被分成:取指、译码、访存、执行、写回等若干个阶段。然后,多条指令可以同时存在于流水线中,同时被执行。指令流水线并不是串行的,并不会因为一个耗时很长的指令在“执行”阶段耗时很长时间,而导致后续的指令都卡在“执行”之前的阶段上。我们编写的程序都要经过优化后(编译器和处理器会对我们的程序进行优化以提高运行效率)原创 2020-05-28 20:26:23 · 857 阅读 · 3 评论 -
Java并发编程(五):synchronized原理详解及锁优化
文章目录1 引言2 synchronized实现原理2.1 监视器锁(monitor)机制2.2 获取锁和释放锁的内存语义3 synchronized的锁优化3.1 JVM中对象的内存区域3.2 偏向锁3.3 轻量级锁3.4 各种锁的比较3.5 小结点点关注,不会迷路1 引言线程运行时拥有自己私有的栈空间,会在自己的栈空间运行,如果多线程间没有共享的数据也就是说多线程间并没有协作完成一件事情,那么,多线程就不能发挥优势,不能带来巨大的价值。那么共享数据的线程安全问题怎样处理?很自然而然的想法就是每一个线原创 2020-05-17 12:49:43 · 638 阅读 · 0 评论 -
Java并发编程(四):CyclicBarrier原理详解
1 引言少侠在之前的一篇博客介绍闭锁CountDownLatch的时候有提到CyclicBarrier,那么它究竟是什么呢?本篇文章和你们一起揭开它神秘的面纱。关于CountDownLatch的原理和用法可以阅读下篇,附传送门↓:Java并发编程(三):CountDownLatch(闭锁)原理及最佳实践从字面上的意思可以知道,这个类的中文意思是“循环栅栏”。大概的意思就是一个可循环利用的屏...原创 2020-04-14 20:05:51 · 250 阅读 · 0 评论 -
Java并发编程(三):CountDownLatch(闭锁)原理及利用闭锁实现两个线程分别输出100以内的奇数和偶数
1 引言在实际开发中,经常遇到这样一种场景:有一组线程,每个线程去持行自己的任务,现在想实现等所有线程都持行完毕后,再向下执行代码。比如我们开启一组线程去同步服务器的数据,点赞记录,下载记录,收藏记录等等用户信息,所有数据同步完成之后继续向下执行。2 CountDownLatch的概念CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,用于开启一组线程,使一个线程在等待...原创 2020-04-05 18:39:21 · 536 阅读 · 1 评论 -
Java并发编程(二):LockSupport应用及原理分析
1 引言上一篇简单介绍了Java中的Thread机制,附传送门↓:Java并发编程(一):了解Thread我们知道,可以通过wait()让线程等待,通过notify()唤醒线程,但使用wait(),notify()来实现等待唤醒功能至少有两个缺点:wait()和notify()都是Object中的方法,在调用这两个方法前必须先获得锁对象,这限制了其使用场合:只能在同步代码块中。另...原创 2020-04-04 16:00:38 · 374 阅读 · 0 评论 -
Java并发编程(一):了解Thread
1 引言线程是进程中可独立执行的最小单位,也是CPU资源分配的基本单位。线程有的四个基本属性:属性描述编号id线程的唯一标识名称线程的名字,默认“Thread-编号id”,可自定义类别分为守护线程和用户线程,可以通过setDaemon(true)设置为守护线程优先级表示希望哪个线程优先执行,Java中优先级取值范围是1~10,默认52 ...原创 2020-04-03 17:29:12 · 222 阅读 · 0 评论 -
高并发下接口幂等性解决方案
1 引言在实际开发中,经常遇到这样的场景:无论做多少次操作,都应该产生一样的效果或是返回同样的结果。如:用户发起一笔付款请求,应该只扣除用户一次余额,无论是因为网络重发或是系统bug,都应该只扣除一次发送通知消息,应该只发一次,要是用户重复收到通知会引起客户反感分销系统中给推广者计算佣金,每个周期内的佣金只能入库一次,要是重复入库难免会造成财务损失2 幂等性的概念幂等(idempo...原创 2020-04-01 20:45:47 · 753 阅读 · 0 评论 -
【并发编程】ThreadLocal 的原理分析和最佳实践
1. 引言之前在学习ThreadLocal的时候,了解到其作用是数据隔离,并且是每一个线程复制了一份,每个线程的访问的数据都是不受其他线程影响的。其实,这句话前半句是对的,ThreadLocal的确是数据的隔离,但是并非数据的复制,而是在每一个线程中创建一个新的数据对象(这点类似于new创建对象),然后每一个线程使用的是不一样的。2. 示例首先想通过个小问题来说明ThreadLocal的用法...原创 2020-01-28 21:01:52 · 7459 阅读 · 1 评论 -
【并发编程】基础系列(一):线程安全性
简介随着计算机硬件的飞速发展,处理器的数量持续增长,要想充分发挥多处理器系统的强大计算能力,就需要使用多线程,因此高效的并发变得越来越重要。本篇将带领大家进入并发编程领域,说到并发编程,不得不提的就是线程安全性。在构建稳健安全的并发程序的时候,必须正确的使用线程和锁,但这只是实现机制,核心在于对状态访问操作进行管理,尤其是共享状态(Shared)和可变状态(Mutable),对象的状态,可...原创 2020-01-20 22:41:01 · 31759 阅读 · 0 评论 -
【分布式锁】并发场景下的数据插入
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...原创 2020-01-01 22:17:11 · 2061 阅读 · 0 评论