在多线程情景下,如果不会某一共享变量采取一些同步机制,很可能发生数据不安全现象,比如购买车票时,当多个人购买时,不加锁就会产生多人买同一张票的现象,显然这是不可取的。所以要有一种同步机制,在某一时刻只能有一个线程处理该共享变量。 同步器的加锁 我将自己实现的同步器成为RoadAQS. 主要变量如下: ...
分类:
其他好文 时间:
2020-02-27 01:02:39
阅读次数:
97
本博客系列是学习并发编程过程中的记录总结。由于文章比较多,写的时间也比较散,所以我整理了个目录贴(传送门),方便查阅。 "并发编程系列博客传送门" 本文参考了 "[Java多线程进阶(六)—— J.U.C之locks框架:AQS综述(1)" ]和 "Java技术之AQS详解" 两篇文章。 AQS 简 ...
分类:
其他好文 时间:
2020-02-21 18:06:09
阅读次数:
83
前言 什么是AQS,是AbstractQueuedSynchronizer类的简称。J.U.C大大提高了并发的性能,而AQS又是J.U.S的核心。 主体概要 J.U.C之AQS介绍 J.U.C之AQS-CountDownLatch J.U.C之AQS-Semaphore J.U.C之AQS-Cycl ...
分类:
其他好文 时间:
2020-02-20 23:54:50
阅读次数:
116
整个的体系图 悲观锁,乐观锁 是一个广义概念;体现的是看待线程同步的不同角度。 悲观锁 认为在自己使用数据的时候一定有别的线程来修改数据,在获取数据的时候会先加锁,确保数据不被别的线程修改。 实现:关键字synchronized,接口Lock的实现类 适用场景:写操作多,先加锁可以保证写操作时的数据 ...
分类:
编程语言 时间:
2020-02-20 22:14:44
阅读次数:
64
前言AQS(Abstract Queued Synchronizer)是JUC并发包中的核心基础组件,作者是大名鼎鼎的Doug Lea。通过AQS可以实现大部分的同步需求。宏观架构AQS包括一个state和一个FIFO的CLH队列,如下图所示:CLH队列中的每个节点Node就可以对应与争用该资源的线... ...
分类:
其他好文 时间:
2020-02-18 18:54:59
阅读次数:
58
1. concurrent包的结构层次 在针对并发编程中,Doug Lea大师为我们提供了大量实用,高性能的工具类,针对这些代码进行研究会让我们队并发编程的掌握更加透彻也会大大提升我们队并发编程技术的热爱。这些代码在java.util.concurrent包下。如下图,即为concurrent包的目 ...
分类:
其他好文 时间:
2020-02-15 18:34:14
阅读次数:
54
并发编程面试题-内存模型说下内存模型定义为什么要有内存模型为什么要重排序,重排序在什么时候排如何约束重排序规则happens-before什么是顺序一致性CAS 实现的原理,是阻塞还是非阻塞方式?什么时候用,使用时需要考虑的问题处理器和 Java 分别怎么保证原子操作保证了原子性就能保证可见性吗?f ...
分类:
编程语言 时间:
2020-02-14 10:35:22
阅读次数:
75
AQS是什么 AbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的。 先看下一下AbstractQueuedSynchronizer的说明文档 通过官方文档可以知道它是用来构建锁或者其他同步组件的基础框架,它使用了 ...
分类:
其他好文 时间:
2020-02-13 22:52:57
阅读次数:
63
Reentrantlock Reentrantlock在AQS源码解析中已经捎带着解析过了,这里不再提及 CountDownLatch CountDownLatch在AQS源码解析中也已经解析过了,这里同样不再提及 CyclicBarrier CountDownLatch 基于 AQS 的共享模式的 ...
分类:
其他好文 时间:
2020-02-12 22:21:05
阅读次数:
79
文大篇幅引用自HongJie大佬的一行一行源码分析清楚AbstractQueuedSynchronizer,这只是一篇简单的个人整理思路和总结(倒垃圾),如果觉得有些难懂的话,不要犹豫也不要疑惑,很明显是我这篇文章的问题,不是你的问题,这时你最好直接转去看HongJie大佬的原文,那个会好懂很多。还 ...
分类:
其他好文 时间:
2020-02-11 00:28:44
阅读次数:
73