一、分类 1.从锁的公平性来区分,可以分为公平锁和非公平锁;2.从锁是否可重复获取可分为可重入锁和不可重入锁;3.从资源已被锁定,线程是否阻塞可以分为自旋锁;4.从线程是否对资源加锁可以分为悲观锁和乐观锁;5.从那个多个线程能否获取同一把锁分为共享锁 和 排他锁。6.多Jvm环境下多线程操作多个资源 ...
分类:
其他好文 时间:
2021-06-02 20:20:32
阅读次数:
0
1. 介绍 本文我们继续探究使用AQS的子类ReentrantReadWriteLock(读写锁)。老规矩,先贴一下类图 ReentrantReadWriteLock这个类包含读锁和写锁,这两种锁都存在是否公平的概念,这个后面会细讲。 此类跟ReentrantLock类似,有以下几种性质: 可选的公 ...
分类:
编程语言 时间:
2021-06-02 16:39:51
阅读次数:
0
1、CAS 多个线程同CAS更新同一个变量,只有一个线程能成功,其他的都失败,但不会挂起,只是通知其他线程再次尝试。 包含三个值:内存值V,进行比较的预期原值A、准备写入的新值B。如果V和A相等,则将V更新为B。 2、AQS(AbstractQueuedSynchronizer) 内部通过Node构 ...
分类:
其他好文 时间:
2021-06-02 12:49:40
阅读次数:
0
🐉 大致介绍 本章讲解一下CAS,本质就是机器指令:cmpxchg+lock(根据处理器核数进行判断) 原子操作; 而在谈到并发操作里面,我们不得不谈到AQS,JDK的源码里面好多并发的类都是通过Sync(同步器)的内部类继承AQS而实现出五花八门的功能; 🐉 简单认识AQS 🐉 何为AQS? ...
分类:
编程语言 时间:
2021-05-24 14:01:29
阅读次数:
0
一、释放锁 1.void unlock()方法 尝试释放锁,如果当前线程持有锁,则调用该方法会让该线程对该线程持有的AQS状态值减1,如果减去1后当前状态值为0,则当前线程会释放该锁,否则仅仅减去1而已,如果当前线程没有持有该锁而调用了该方法就会抛出IllegalMonitorStateExcept ...
分类:
编程语言 时间:
2021-04-16 12:19:27
阅读次数:
0
@ 1 介绍 前置知识,可以看AQS(一)独占锁(基于JDK 8) ReentrantLock 是一个可重入的独占锁。 在独占模式中,isHeldExclusively 为 true 表示是对当前线程加锁,false 表示未加锁或者对其他线程加锁。 加锁状态由 state 标识,如果为0,则说明未加 ...
分类:
其他好文 时间:
2021-04-02 13:21:20
阅读次数:
0
实现原理 AQS(AbstractQueuedSynchronizer),抽象的队列式同步器 AQS 维护了一个 state(共享资源变量)和一个 FIFO 线程等待队列(CLH 队列),多个线程竞争 state 被阻塞时就会进入此队列中。 State state 使用 volatile 修饰的一个 ...
分类:
编程语言 时间:
2021-03-17 15:06:57
阅读次数:
0
深入理解Java并发框架AQS系列(一):线程 深入理解Java并发框架AQS系列(二):AQS框架简介及锁概念 一、概述 1.1、前言 重剑无锋,大巧不工 读j.u.c包下的源码,永远无法绕开的经典并发框架AQS,其设计之精妙堪比一件艺术品,令众多学者毫不吝惜溢美之词。近期准备出一系列关于AQS的 ...
分类:
编程语言 时间:
2021-03-15 11:36:01
阅读次数:
0
引言 上一篇文章我们介绍了AQS的信号量Semaphore《Java高并发编程基础三大利器之Semaphore》,接下来应该轮到CountDownLatch了。 什么是CountDownLatch CountDownLatch是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕 ...
分类:
编程语言 时间:
2021-03-12 12:32:20
阅读次数:
0
引言 曾经有一道比较比较经典的面试题“你能够说说java的并发包下面有哪些常见的类?”大多数人应该都可以说出 CountDownLatch、CyclicBarrier、Sempahore多线程并发三大利器。这三大利器都是通过AbstractQueuedSynchronizer抽象类(下面简写AQS) ...
分类:
编程语言 时间:
2021-02-25 12:23:16
阅读次数:
0