一、ReentrantLock原理 ReentrantLock是一个可重入的独占锁,同时只能有一个线程可以获取该锁,其他获取该锁的线程会被阻塞而放入该锁的AQS阻塞队列里面。ReentrantLock最终是使用AQS来实现的,并且根据参数来决定其内部是一个公平锁还是非公平锁,默认是非公平锁。 pub ...
分类:
其他好文 时间:
2020-06-18 12:49:04
阅读次数:
63
什么是AQS ReentrantLock的底层实现 支持尝试获取锁 支持重入 支持打断 支持多条件 支持公平锁和非公平锁 支持共享锁和排他锁 怎么做到的 使用了模板方法实现tryAcquire 子类Sync实现 通过CAS操作state的值,state为volatile修饰,线程可见 state为0 ...
分类:
其他好文 时间:
2020-06-17 20:00:10
阅读次数:
69
一、概述 ReentrantLock类是在内部利用自己的内部类Sync继承了AbstractQueuedSynchronizer,实现了tryAcquire()方法,在这个方法中增强自己的功能,比如添加了重入和公平锁、非公平锁。ReentrantLock再将Sync作进一步的封装,开放出去Lock的 ...
分类:
其他好文 时间:
2020-06-17 01:06:59
阅读次数:
58
1.大纲 Lock接口 锁的分类 乐观锁和悲观锁 可重入锁与非可重入锁 公平锁与非公平锁 共享锁与排它锁 自旋锁与阻塞锁 可中断锁 锁优化 一:Lock接口 1.锁 是一种工具,用于控制对共享资源的访问 Lock和synchronized,是常见的锁,都可以达到线程安全的目的 Lock最常见的实现类 ...
分类:
其他好文 时间:
2020-06-01 00:37:47
阅读次数:
79
Lock锁 传统 synchronized 举例:买票的栗子 真正的多线程开发,公司中的开发,需要降低耦合度 线程是一个单独的资源,没有任何附属的操作! 单独的资源包含属性、方法 第一种:高耦合写法,Ticket线程类还有附属操作,不推荐使用 public class SaleTicketDemo0 ...
分类:
其他好文 时间:
2020-05-24 13:27:56
阅读次数:
59
1、Synchronized是jvm层面的锁是由jvm实现的而ReentrantLock是Api层面的锁它需要lock()和unlock()方法来获得锁和释放锁。 2、ReentrantLock获取锁可等待中断、可作为公平锁和非公平锁而Synchronized只能阻塞的等待获取锁、只能为非公平锁。 ...
分类:
其他好文 时间:
2020-05-11 23:21:43
阅读次数:
55
在Java并发场景中,会涉及到各种各样的锁,比如:高并发编程系列:4种常用Java线程锁的特点,性能比较、使用场景,这些锁有对应的种类:公平锁,乐观锁,悲观锁等等,这篇文章来详细介绍各种锁的分类: 公平锁/非公平锁 可重入锁 独享锁/共享锁 乐观锁/悲观锁 分段锁 自旋锁 乐观锁 VS 悲观锁 乐观 ...
分类:
编程语言 时间:
2020-05-08 10:15:54
阅读次数:
79
Java锁之公平锁和非公平锁 概念 公平锁 是指多个线程按照申请锁的顺序来获取锁,类似于排队买饭,先来后到,先来先服务,就是公平的,也就是队列 非公平锁 是指多个线程获取锁的顺序,并不是按照申请锁的顺序,有可能申请的线程比先申请的线程优先获取锁,在高并发环境下,有可能造成优先级翻转,或者饥饿的线程( ...
分类:
编程语言 时间:
2020-04-27 09:56:32
阅读次数:
71
ReentrantLock 1 数据结构 从上图可以看出,ReentrantLock的功能都是通过sync这个对象提供的。 2 获取锁是否要走公平非公平逻辑 区分公平非公平锁,公平锁老实排队 lock lockInterruptibly tryLock(long timeout, TimeUnit ...
分类:
其他好文 时间:
2020-04-21 15:19:37
阅读次数:
56
1. 公平锁与非公平锁 公平锁:严格按照线程启动的顺序执行,不允许其他线程插队执行;非公平锁允许插队; 当使用非公平锁时,会立刻尝试配置状态,成功则:插队执行,失败则:与公平锁一样调用acquire()方法,以排他方式获取锁,成功后立刻返回,否则将线程加入队列,直到成功调用为止。 2. 悲观锁与乐观 ...
分类:
数据库 时间:
2020-04-12 00:03:47
阅读次数:
85