并发开发
mazhen1991
这个作者很懒,什么都没留下…
展开
-
zookeeper实现分布式锁
接口:import java.util.concurrent.TimeUnit;public interface DistributedLock { public void getLock() throws Exception; public boolean getLock(long time,TimeUnit timeUnit) throws Exception; public原创 2017-11-06 22:26:56 · 1477 阅读 · 0 评论 -
使用redis解决并发操作问题
在日常的开发中,有时我们会遇到这样的场景:多个人对同一个数据进行修改操作,导致并发问题发生。这个问题可以通过悲观锁来解决,但是悲观锁也是有限制的,在某些场景中是不适应的,因为和数据的耦合度太高了,可能会影响到其他业务的操作。而使用redis来解决这一问题是很好的选择。原理介绍redis的存储指令中有一个setnx方法,这个方法有一个特性,就是当键不存在的时候,会将这条数据插入,并且返回1,如果这个键原创 2017-06-12 20:32:42 · 5874 阅读 · 0 评论 -
注解的方式实现redis分布式锁
创建redisLock注解:import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annot原创 2017-11-06 18:08:59 · 5347 阅读 · 2 评论 -
深入理解synchronized实现原理
四种锁状态无锁状态偏向锁轻量锁重量锁JVM是如何来识别锁状态的synchronized关键字是一个对象锁,锁的状态以及谁持有锁,都是记录在这个对象中的,首先我们来看一下一个对象在内存中是如何组成的。从上图可以看出,一个对象的对象头中除了指向该对象的Class对象的指针和数组长度(如果对象为数组,会记录数组的长度)外,还有一个Mark Word。这个Mark Word中主要存储的...原创 2019-05-21 16:31:34 · 1362 阅读 · 0 评论 -
reentrantLock公平锁和非公平锁源码解析
ReentrantLock非公平锁源码分析ReentrantLock lock = new ReentrantLock();lock.lock();上面这段代码是最简单的获取ReentrantLock的非公平锁的代码,我们来看看这段代码后面的源码是如何运行的。final void lock() { //首先尝试看看能不能获取到锁,如果CAS成功,那么就获取到了 if (compa...原创 2019-05-22 19:50:09 · 5172 阅读 · 0 评论