高并发
@云师兄
将技术心得汇聚总结,利人利己
展开
-
java并发之加锁
这段时间有一个需要是要“开宝箱”,涉及到一个事务中有多个数据库表要同步更新,初始阶段没有加锁导致一系列并发问题(当大脑沉浸在业务逻辑上的思考时候很容易忽略,原谅我的狡辩),期间遇到一些“灵异现象”,但最后在高手的指点下渐渐明白了一些以前留在大脑却没有理解深刻的概念,比如分布式锁、悲观锁、乐观锁等。下面按照我解决问题的先后顺序和问题发酵的流程,一些罗列遇到的各种坑。ReentranLock第一步就是想原创 2017-12-19 22:50:26 · 1216 阅读 · 0 评论 -
java并发之死锁
上一篇博客 java并发之加锁中主要介绍了在数据库中的加锁问题,现在来聊聊Java中会出现的死锁。 关于死锁,一般教科书的都会罗列满足死锁的几个概念,如互斥、竞态条件等,今天从代码里直接去看死锁,或许会更加直观,直捣黄龙,比记住概念要强得多。/** * @author Jerry */public class ThreadDeadlock { public static void m原创 2017-12-24 13:27:03 · 313 阅读 · 0 评论 -
java并发之同步工具类一之闭锁Latch
java同步工具类(指jdk1.5版本)主要有闭锁(Latch)、信号灯(semaphore)和栅栏(barrier)。本篇作为开篇,先讲闭锁。闭锁就相当于一扇门,在制定的线程到达后这扇门才打开,后续所有线程可以通过,否则就一直处于阻塞状态。用于确保某些活动(这里可以理解为子线程)都完成后再继续执行下去(主线程)。如游戏中所有玩家就绪后才能点击开始,测试并发代码块真正的执行时间等(当我们在测试多线程原创 2017-12-24 14:12:56 · 340 阅读 · 0 评论 -
java并发之同步工具类二之信号灯semaphore
java中信号灯可以控制多个线程同时访问同一个资源的操作数量,注意这句话的重点在于“控制”二字。即可以为某种容器施加边界限制,也可以实现对某种资源的池化,比如线程池中限制最大运行5个线程,当有有超过5个线程同时来访问线程池的时候,必定有一个线程会处于阻塞等待状态。通过控制边界数量,可以避免过度线程占用内存而引发内存不足问题。其实现是通过一组运行在有界容器内的访问许可permit。 比如商场的车库,原创 2017-12-24 14:45:39 · 362 阅读 · 0 评论 -
java并发之同步工具类三之栅栏Barrier
栅栏跟闭锁是有同样的功能的,都可以让所有线程都阻塞在同一个位置。唯一不同的是,闭锁等待的是事件,而栅栏等待的是一起执行的其他线程。 在之前的博客中 java并发之同步工具类一之闭锁Latch引用了一个赛跑案例,运动员相当于多个并发的子线程,而裁判就是主线程。运动员的就绪等待的是裁判起跑枪指令(即一个事件),当起跑枪发射所有运动员就同时开始跑。这是闭锁的实现方式,而栅栏不同,它没有裁判这个角色,它是原创 2017-12-24 15:15:22 · 547 阅读 · 0 评论