NexT


  • 首页

  • 归档

  • 标签

AQS源码分析(3)——超时与中断

发表于 2019-07-11

本文概要

在AQS(1)中,从ReentrantLock入手,分析了获取和释放锁的源代码;在AQS(2)中,走了一遍Condition条件队列的等待与唤醒。 在两篇文章中,都只是找了典型的几个方法,如ReentrantLock的lock()/unlock(),以及 Condition的await()/signal()。事实上,还有带超时机制,和中断机制的方法,本文就来查漏补缺,大概过一遍 这几个方法。

阅读全文 »

AQS源码分析(2)——Condition条件队列

发表于 2019-07-09

Condition 简介

Condition的await()/signal()/signalAll()方法提供了Object的wait()/notify()/notifyAll()方法的替代品; 此外,还对其进行了增强:一个锁可以有多个Condition队列,以实现精准的唤醒。 本文主要通过源码来看看Condition在AQS里是怎么实现的。

阅读全文 »

AQS源码分析(1)——从RenentrantLock初窥AQS

发表于 2019-07-07

AQS 简介

AbstractQueuedSynchronizer,抽象队列同步器,为JUC包中的各阻塞锁和同步器 提供了一个框架,其基于一个FIFO队列(CLH队列的一种变体),以模板设计模式,为大 多数同步器提供了一个基本的实现。

两个内部类

Node:队列节点类

Node类是AQS的FIFO等待队列的节点类,其主要有以下字段属性: ```java // 共享模式下等待的节点标记 static final Node SHARED = new Node(); // 独占模式下等待的节点标记 static final Node EXCLUSIVE = null;

1
2
3
4
5
6
7
8
9
10
// 等待状态值:当前节点的线程已取消等待(可能是因为超时、中断等原因,一旦标记则不再变化)
static final int CANCELLED =  1;
// 等待状态值:当前节点的后继节点需要唤醒(也可以理解成后继节点的状态,在当前节点取消或释放锁时进行唤醒操作)
static final int SIGNAL    = -1;
// 等待状态值:当前节点在条件队列中排队等待(被移入等待队列后会设置成0)
static final int CONDITION = -2;
// 等待状态值:下一个共享锁的获取操作将无条件扩散(没有理解)
static final int PROPAGATE = -3;
// 等待状态,取值为上4种,以及默认值0/
volatile int waitStatus;
阅读全文 »

以图看码之HashMap(1)

发表于 2019-07-04

JDK8 中HashMap的putVal方法工作流程图:

阅读全文 »

MQ高可用简介

发表于 2019-07-03

RabbitMQ的高可用性

先说结论:采用集群+镜像队列的方式提高可用性

集群模式

在rabbitMQ的集群模式下,集群中所有节点都会备份所有的元数据信息,包括:

  1. 队列元数据:队列名称和属性
  2. 交换器元数据:交换器名称和属性
  3. 绑定关系元数据:队列和交换机的绑定关系
  4. vhost元数据:为其内的上三者提供命名空间和安全属性
阅读全文 »

【转】消息队列设计精要

发表于 2019-06-27

消息队列设计精要

转自 消息队列设计精要 - 美团技术团队

阅读全文 »

设计模式之适配器模式

发表于 2019-06-25

适配器模式

适配器将被适配的类的方法适配成客户端所期待的方法;
或者说,适配器将不同类的方法统一成某个接口的一个方法,方便客户端进行调用;
如:客户端想调用类A的方法a,但是客户端的代码实现中只能调用接口B的b方法,此时可以用C类去实现B接口,并在b方法里,调用A类的a方法;

阅读全文 »

设计模式之建造者模式

发表于 2019-06-25

建造者模式

又称生成者模式,封装一个类的具体创建过程,使用者无需知道类的具体组成

阅读全文 »

设计模式之工厂模式

发表于 2019-06-25

简单工厂

又称“静态工厂方法模式”

阅读全文 »

设计模式之原型模式

发表于 2019-06-25

原型模式

简而言之,以clone代替new;
适用于大量创建对象/对象依赖对象复杂,以致创建成本高的场景下

阅读全文 »
1 2 3
wu.zt

wu.zt

30 日志
30 标签
RSS
© 2020 wu.zt
由 Jekyll 强力驱动
主题 - NexT.Muse