`ReentrantLock`是一种可重入锁,可重入是说同一个线程可以多次获取同一个锁,内部会有相应的字段记录重入次数,它同时也是一把互斥锁,意味着同时只有一个线程能获取到可重入锁。 1.构造函数 提供了两个构造函数,构造函数只是用来初始化 字段,可以看到,默认情况下 使用的是非公平锁,当然,也可以 ...
分类:
其他好文 时间:
2020-03-17 08:19:07
阅读次数:
62
参考:https://juejin.im/post/5ca89afa5188257e1d4576ff jdk7由Segment数组结构和HashEntry数组结构组成。HashEntry则用于存储键值对数据,Segment是一种可重入锁ReentrantLock,Segment的结构和HashMap ...
分类:
其他好文 时间:
2020-03-14 12:30:45
阅读次数:
42
前言 本文转自:https://www.cnblogs.com/starry-skys/p/12489271.html JDK1.5 之后发布了JUC(java.util.concurrent),用于解决多线程并发问题。AQS 是一个特别重要的同步框架,很多同步类都借助于 AQS 实现了对线程同步状 ...
分类:
其他好文 时间:
2020-03-14 11:14:24
阅读次数:
39
性能: 数据量少时,Synchronized> Lock、Semaphore。 数据量大时,Lock > Synchronized > Semaphore。 Blockingqueue底层也是使用ReentrantLock + Condition。 一、Synchronized方式 1 packag ...
分类:
其他好文 时间:
2020-03-09 18:16:21
阅读次数:
50
1.重入锁(ReentrantLock) 重入锁使用java.util.concurrent.locks.ReentrantLock类来实现,具有与synchronized关键字相似的功能。 1 package com.company; 2 3 import java.util.concurrent ...
分类:
其他好文 时间:
2020-03-06 10:51:18
阅读次数:
52
一,谈一谈什么是AQS AQS是一个用来创建锁和同步器的框架,使用AQS能够简单且高效的构造出应用广泛的大量的同步器,比如常用的ReentrantLock,Semaphore‘,其他的诸如ReentrantReadWriteLock,FutureTask等等皆是基于AQS非常轻松容易的构造出符合我们 ...
分类:
其他好文 时间:
2020-03-03 00:35:23
阅读次数:
77
AQS介绍 AbstractQueuedSynchronizer简称AQS,即队列同步器。它是JUC包下面的核心组件,它的主要使用方式是继承,子类通过继承AQS,并实现它的抽象方法来管理同步状态,它分为独占锁和共享锁。很多同步组件都是基于它来实现的,比如我门常见的ReentrantLock,它是基于 ...
分类:
其他好文 时间:
2020-02-29 18:57:36
阅读次数:
81
ReentrantLock是一把重入锁,可中断,可以限时,支持公平锁和非公平锁。 下面举一个生活中的例子,帮助大家来更好的理解ReentrantLock这些特性。 火车购票。买票人争先恐后的跑到G1020检票口检票回家,谁先跑到检票口,谁先验票,谁先回家。那些跑的慢没有抢到检票权的,一个一个的在后面 ...
分类:
其他好文 时间:
2020-02-29 18:45:59
阅读次数:
63
Semaphore信号量Semaphore是一个控制访问多个共享资源的计数器,本质上是一个共享锁Java并发提供了二种加锁模式:共享锁和独占锁。ReentrantLock是独占锁,每次只能有一个线程持有,共享锁运行多个线程... ...
分类:
其他好文 时间:
2020-02-28 12:07:48
阅读次数:
53
主要用到的是ReentrantLock锁,还有 notEmpty empty两个条件,生产连接与消费连接的线程在两个条件上等待与唤醒。empty还是生产者,notEmpty是消费者。主要DruidAbstractDataSource与DruidDataSource两个类了。 创建连接 DruidDa ...
分类:
其他好文 时间:
2020-02-27 18:54:07
阅读次数:
64