
锁
木霖森77
这个作者很懒,什么都没留下…
展开
-
可重入锁 介绍以及原理
可重入锁介绍首先,在Synchronized和ReentrantLock的区别中,我们介绍了两者都是可重入锁,那么究竟什么是可重入锁呢?其内部原理又是如何实现的呢?概念:可重入锁意味着:若一个程序或子程序可以“在任意时刻被中断然后操作系统调度执行另外一段代码,这段代码又调用了该子程序不会出错”,则称其为可重入(reentrant或re-entrant)的。即当该子程序正在运行时,执行线程可...转载 2019-03-18 08:21:32 · 16360 阅读 · 1 评论 -
Synchronized详解(可重入、Monitor原理等)
其他相关文章见:《Lock与synchronized 的区别》《可重入锁 介绍以及原理》介绍Synchronized之前,我们先来看一下线程安全的相关概念。造成线程安全问题的主要诱因有两点,一是存在共享数据(也称临界资源),二是存在多条线程共同操作共享数据。因此,引入了互斥锁的概念,即一个共享数据只能被一个线程访问,其他线程需要等待(阻塞),直至当前线程处理完毕释放该锁。so,synch...转载 2019-03-18 11:22:39 · 24386 阅读 · 7 评论 -
CountDownLatch和CyclicBarrier和Semaphore
https://www.cnblogs.com/dolphin0520/p/3920397.html先说一下,CountDownLatch和CyclicBarrier以及Semaphore都是在java1.5版本中提供的,JDK5.0提供的JUC(java.util.concurrent)包下的。JUC包有Locks和Atomic包,还有很多接口和类:线程池Executor、ExecutorS...转载 2019-04-04 09:42:41 · 192 阅读 · 0 评论 -
CopyOnWrite 写时复制
Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。JDK1.5开始,JUC (java.util.concurrent)包下有着这么两个类,CopyOnWriteArrayList 和 CopyOnWriteArraySet。...转载 2019-04-06 08:13:14 · 611 阅读 · 0 评论 -
分布式锁之Redis实现分布式锁 代码
实现分布式锁的方式有:数据库实现;redis实现;zookeeper实现。这里我们学习一下redis实现分布式锁。必备条件要实现分布式锁需要满足四种条件:互斥性。任何时刻都只有一个客户端能够持有锁。不会发生死锁。即使一个客户端在持有锁的期间崩溃而没有主动的解锁,也能保证后续其他客户端能加锁。具有容错性。大部分的Redis节点正常运行,客户端就可以加锁和解锁。解铃还须系铃人。加锁和解...转载 2019-04-01 19:56:26 · 284 阅读 · 0 评论 -
分布式锁之redis实现分布式锁 理论
首先,分布式理论:任何一个分布式系统都无法同时满足Consistency、Availability、Partition tolerance(一致性、可用性、分区容错性)。最多只能同时满足两项。在实际场景中,我们为了保证数据的最终一致性,需要很多技术方案来支持。例如分布式事务、分布式锁等。分布式环境与单机环境的区别:分布式与单机情况的最大的不同就是不是多线程而是多进程;多线程由于可以共享堆...转载 2019-04-02 09:38:34 · 439 阅读 · 0 评论 -
CAS乐观锁和Synchronize悲观锁的使用场景与选择
《Lock与synchronized 的区别》定义:悲观锁(Pessimistic Lock):每次获取数据的时候,都会担心数据被修改,所以每次获取数据的时候都会进行加锁,确保在自己使用的过程中数据不会被别人修改,使用完成后进行数据解锁。由于数据进行加锁,期间对该数据进行读写的其他线程都会进行等待。乐观锁(Optimistic Lock):每次获取数据的时候,都不会担心数据被修改,所以每...原创 2019-04-17 09:20:02 · 2779 阅读 · 1 评论 -
synchronized原理和ReentrantLock对比
先看一下自己的进行复习:《Synchronized详解(可重入、Monitor原理等)》尽量不要使用 synchronized(String a) 因为JVM中,字符串常量池具有缓冲功能!synchronized 同步语句块的实现使用的是 monitorenter 和 monitorexit 指令,其中 monitorenter 指令指向同步代码块的开始位置,monitorexit 指令则指...转载 2019-04-17 10:37:57 · 548 阅读 · 0 评论 -
volatile和synchronized的区别(&& java内存模型)
这篇文章是复习,volatile相关详细介绍可以见我的另一篇文章:《Volatile关键字以及java并发和锁的相关知识》java内存模型在 JDK1.2 之前,Java的内存模型实现总是从主存(即共享内存)读取变量,是不需要进行特别的注意的。而在当前的 Java 内存模型下,线程可以把变量保存本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变...转载 2019-04-18 09:45:22 · 170 阅读 · 0 评论