简介 双重检测锁定模式是一种设计模式,我们通过首次检测锁定条件而不是实际获得锁从而减少获取锁的开销。 双重检查锁定模式用法通常用于实现执行延迟初始化的单例工厂模式。延迟初始化推迟了成员字段或成员字段引用的对象的构造,直到实际需要才真正的创建。 但是我们需要非常小心的使用双重检测模式,以避免发送错误。 ...
分类:
编程语言 时间:
2020-10-14 20:19:17
阅读次数:
27
前言 并发编程式Java基础,同时也是Java最难的一部分,因为与底层操作系统和硬件息息相关,并且程序难以调试。本系列就从synchronized原理开始,逐步深入,领会并发编程之美。 正文 基础稍微好点的同学应该都知道,Java中获取锁有两种方式,一种是使用synchronized关键字,另外一种 ...
分类:
其他好文 时间:
2020-09-10 23:06:13
阅读次数:
57
Lock显式锁是一个接口 Lock方式来获取锁支持中断、超时不获取、是非阻塞的 提高了语义化,哪里加锁,哪里解锁都得写出来 Lock显式锁可以给我们带来很好的灵活性,但同时我们必须手动释放锁 支持Condition条件对象 允许多个读线程同时访问共享资源 Synchronized锁经过优化之后,现在 ...
分类:
其他好文 时间:
2020-08-19 19:17:57
阅读次数:
76
偏向锁入口 synchronized分为synchronized代码块和synchronized方法,其底层获取锁的逻辑都是一样的。 要找到锁的入口,就要找到代码中对monitorenter指令解析的地方。在HotSpot中有两处对monitorenter进行了解析:一个是在bytecodeInte ...
分类:
其他好文 时间:
2020-07-29 12:44:29
阅读次数:
63
可重入锁 可重锁是指同一个线程,外层函数获取锁后,内层函数可以自动获取到锁。 java中synchronized和ReentrantLock都是可重入锁。 对于synchronized,其实现机制有jvm实现。 对于ReentrantLock,其继承自父类AQS,其父类AQS中维护了一个同步状态st ...
分类:
编程语言 时间:
2020-07-23 22:39:26
阅读次数:
64
公平和非公平锁 公平锁:是指多个线程按照申请锁的顺序来获取锁,类似排队,先来后到。 非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁在高并发的情况下,有可能会造成优先级反转或者饥饿现象。 两者区别: 并发包中ReentrantLock的创建可以指定 ...
分类:
其他好文 时间:
2020-07-21 09:46:12
阅读次数:
82
redis应用场景: 一.string 1.缓存 简单key-value存储 2.分布式锁 setnx key value,当key不存在时,将 key 的值设为 value ,返回1 若给定的 key 已经存在,则setnx不做任何动作,返回0。 当setnx返回1时,表示获取锁,做完操作以后de ...
分类:
其他好文 时间:
2020-07-19 11:30:08
阅读次数:
93
Java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchronized还是存在一些缺陷的:虽然synchronized提供了便捷性的隐式获取锁释放锁机制(基于JVM机制), ...
分类:
其他好文 时间:
2020-07-18 22:47:20
阅读次数:
69
最近几次面试总是遇到这个问题,因此在这里我特意将这个总结一下: Sychronized 和 lock的区别1.首先synchronized是java内置关键字,在jvm层面, Lock是个java提供的一个接口;2.synchronized无法判断是否获取锁的状态,Lock可以判断是否获取到锁;3. ...
分类:
编程语言 时间:
2020-07-15 15:37:16
阅读次数:
118
从Lock讲起 Lock:一个接口,定义了在jdk层面上灵活实现锁的一种方式。 实现该接口的类是ReentrantLock。ReentrantLock这个单词的翻译是重入锁。 重入锁 持有锁的线程可以再次获取锁,增加重入次数,释放的锁时候也要将次数减为0。synchronized和Reentrant ...
分类:
其他好文 时间:
2020-07-12 17:10:25
阅读次数:
55