- 博客(14)
- 资源 (4)
- 收藏
- 关注
原创 同步队列AQS---锁的底层支持 介绍以及原理解读
同步队列AQSAQS------锁的底层支持AbstractQueuedSynchronizer抽象同步队列简称AQS,它是实现同步器的基础组件,并发包中锁的底层就是使用AQS实现的。另外,大多数开发者可能永远不会直接使用AQS,但是知道其原理对于架构设计还是很有帮助的。下面看下AQS的类图结构,如图所示。由该图可以看到,AQS是一个FIFO的双向队列,其内部通过节点head和tail记录队首和队尾元素,队列元素的类型为Node。Node节点内部参数介绍:thread变量用来存放进入AQS队
2020-05-10 21:39:23
346
1
原创 LockSupport 工具类介绍以及使用
LockSupport 工具类JDK中的rt.jar包里面的是个LockSupport是个工具类,它的主要作用是挂起和唤醒线程,该工具类是创建锁和其他同步类的基础。LockSupport类与每个使用它的线程都会关联一个许可证,在默认情况下调用LockSupport类的方法的线程是不持有许可证的。LockSupport是使用Unsafe类实现的,下面介绍LockSupport中的几个主要函数。void park()如果调用park方法的线程已经拿到了与LockSupport关联的许可证,则调用Lock
2020-05-10 21:37:13
439
原创 LongAccumulator介绍,使用,原理
LongAccumulator类原理探究LongAdder类时LongAccumulator的一个特例,LongAccumulator比LongAdder的功能更强大。例如下面的构造函数,其中accumulatorFunction是一个双目运算器接口,其根据输入的两个参数返回一个计算值,identity则是LongAccumulator累加器的初始值。public LongAccumulato...
2020-04-12 19:54:44
3776
2
原创 线程的通知与等待wait(),notify(),notifyAll(),sleep(),interrupt()方法使用以及实现原理
Java中的Object类是所有类的父类,鉴于继承机制,Java把所有的类都需的方法放在了Object类里面,其中就包含要说的通知与等待。1.wait()方法当一个线程调用一个共享变量的 wait() 方法时,该调用线程会被阻塞挂起,直到发生下面几件事情之一才返回。 1.其他线程调用了该共享对象的notify() 或者notifyAll() 方法。 2.其他线程调用了该线程...
2020-01-13 10:24:19
184
原创 CountDownLatch基本使用与简单案例,快速入手
CountDownLatch作用阻塞一个或多个线程等待其他线程完成操作。定义初始化的时候,需要传入一个正数来初始化计数器**(0也可以,但这样定义没有实际意义)。有两个方法countDown()**用于递减计数器,await()方法阻塞当前线程,直到计数器递减为0。CountDownLatch通常用于多个线程之间的协调工作。假设有如下情节:同时获取5张表的数据并一同返回为了让cpu更好的...
2020-01-08 18:52:33
196
原创 [Java 并发]读写锁ReedWriteLock/StampedLock
这篇看一下JUC包提供的读写锁(共享锁/独占锁)。之前我们都知道在一个变量被读或者写数据的时候每次只有一个线程可以执行,那么今天我们来看一下读写锁,读写两不误ReadWriteLock。这里有两个概念:独占锁:指该锁一次只能被一个线程所持有。(ReentrantLock和Synchronized都属于独占锁)。共享锁:指该锁可被多个线程所持有。ReentrantReadWriteLo...
2019-12-27 11:36:07
142
原创 公平锁/非公平锁/可重入锁/自旋锁介绍
在JAVA中我们知道有很多加锁的方式,比如常见的 通过synchronized关键字,还有Lock,还有之前说原子CAS操作时有看到过的死循环方式的自旋锁。借此来说一下锁的分类:公平锁:是指多个线程按照申请的顺序来获取锁,每次获取锁时会先查看此锁维护的等待队列。先到先得。非公平锁:是指多个线程获取锁的顺序并不是按照申请锁的顺序,每个线程不停的去获取锁,直到成功,有可能后申请的线程比先申请...
2019-12-22 13:30:23
306
原创 Integer使用值比较时需要注意的问题
Integer使用值比较时需要注意的问题看以下代码以及执行结果: public static void main(String[] args) { Integer a = 2; Integer b = 2; Integer c = 222; Integer d = 222; System.out.prin...
2019-12-16 18:26:46
219
原创 Atomic包中原子类的使用,以及内部CAS的实现和原理
上篇文章有说过 多线程环境下 进行变量属性 自增操作时会造成线程不安全的情况,也有说到volatile关键字,最后也不能保证线程安全,因为多线程情况下 他不能保证原子性,不能保证写操作过程不可以被插队,最后有提到java.util.current.atomic包中的AtomicInteger类,那么它是如何实现线程安全的呢?,让我们一探究竟!atomc包是java专门提供保证原子性的包...
2019-12-15 18:45:08
452
原创 Volatile关键字的出现背景以及实现原理和解决的问题
volatile关键字java虚拟机提供的轻量级同步机制 保证可见性 禁止指令重排序 不保证原子性 可见性:什么叫可见性呢,首先要说一下JAVA虚拟机内存,JAVA虚拟机内存模型规定,所有的变量都放在计算机的主内存当中,主内存是共享内存区域,所有线程都可以访问,而每个线程创建时都会为其创建一个工作内存(可以称之为栈空间),工作内存呢就是每个线程的私有...
2019-12-13 15:11:14
372
原创 JAVA 通过AOP做全局 请求,返回 日志信息统一处理
很多时候,当我们需要做接口的 埋点,QPS统计的时候可能会依靠一些第三方,现在还需要吗,NO,我们自己来做 直接上代码!!!!!!!!!!!!!!!!!!!!!!!首先定义一个实体类,来存放我们需要的信息:public class WebLog ...
2019-10-17 14:33:36
1059
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人