分布式与高并发
文章平均质量分 76
分布式与高并发
玖涯菜菜子
投资未来的人,是忠于现实的人。
展开
-
Java 并发系列(二)——Semaphore源码分析
Semaphore 通常叫它信号量, 可以用来控制同时访问特定资源的线程数量,也可以用来保持资源生产者和消费者之间的资源限制关系,通过协调各个线程,以保证合理的使用资源。Semaphore 具有公平和非公平两种模式,本文通过源码对 Semaphore 的实现做简单分析。原创 2021-12-28 16:08:42 · 439 阅读 · 0 评论 -
Java 并发系列(一)——CountDownLatch源码分析
CountDownLatch 构造一个用给定计数初始化的并发计数器,能够协调多个线程之间的同步,当前线程在计数器倒计数至零之前一直等待,除非线程被中断。一般用于流程控制之类的场景,大流程分成多个子流程,子流程全部结束后大流程开始操作。原创 2021-12-27 11:32:19 · 346 阅读 · 0 评论 -
Java 锁系列(七)——StampedLock源码分析
一、StampedLock概述StampedLock 是读写锁的实现,对比 ReentrantReadWriteLock 主要不同是该锁不允许重入,多了乐观读的功能,使用上会更加复杂一些,且仅支持非公平锁,但是具有更好的性能表现。StampedLock 的状态由版本和模式组成。 获取锁方法返回一个邮戳,表示和控制与锁状态相关的访问; 这些方法的“尝试”邮戳可能会返回特殊值 0 来表示获取锁失败。 锁释放和转换方法需要标记作为参数,如果它们与锁的状态不匹配则失败。本文对 StampedLock 的实现源码原创 2021-11-30 16:08:28 · 840 阅读 · 0 评论 -
Java 锁系列(五)——ReentrantReadWriteLock源码分析
一、ReentrantReadWriteLock概述ReentrantReadWriteLock 是读写锁的实现,读锁可以在没有写锁的时候被多个线程同时持有,写锁就是和 ReentrantLock 类似的独占锁,它同样有包含公平锁和不公平锁两种实现方式,在实例化时将同时实例化 ReadLock 和 WriteLock 实例,本文主要聚焦于 WriteLock 的实现分析,因为 ReentrantReadWriteLock 中的部分实现与 ReentrantLock 一样基于 AbstractQueuedS原创 2021-11-18 09:11:21 · 445 阅读 · 0 评论 -
Java 锁系列(四)——ReentrantLock源码Condition实现分析
一、Condition 概述Condition 是个接口,依赖于 Lock 接口的实现,基本的方法就是 await() 和 signal() 方法,是在 java 1.5 中才出现的,用于替代 Object 的 wait()、notify() 实现线程间的协作,相比使用 Object 的 wait()、notify(),使用 Condition 的 await()、signal() 这种方式实现线程间协作更加安全和高效。因此通常来说比较推荐使用Condition,阻塞队列实际上是使用了Condition来原创 2021-11-02 19:28:48 · 423 阅读 · 0 评论 -
Java 锁系列(三)——ReentrantLock源码分析
一、ReentrantLock 概述ReentrantLock 是一个可重入的独占锁,是基于 AQS(AbstractQueuedSynchronized,抽象队列式同步器)实现的,它有公平锁和不公平锁两种实现方式。简单查看源码,可以发现 ReentrantLock 其实是一个代理的模式,Reentranlock 的核心是其内部继承自 AbstractQueuedSynchronized 的抽象类 Sync,将 Sync 作为锁的同步基础,其中加锁/解锁等操作其实都是由 Sync 对象完成的,也是通过实例原创 2021-10-18 10:08:32 · 335 阅读 · 0 评论 -
Java 锁系列(二)——ReentrantLock 和 ReadWriteLock基础运用
Lock 接口提供了与 synchronized 相似的功能,和 synchronized 不同的是,Lock 在使用的时候需要显示的获取和释放锁。虽然牺牲了隐式获取释放锁的便捷性,但是对于锁的操作具有更强的可操作性、可控制性以及提供可中断操作和超时获取锁等机制。本文将描述 ReentrantLock 和 ReadWriteLock 锁的基础使用。一、ReentrantLock 运用package com.nineya.test;import java.util.concurrent.Executo原创 2021-09-24 15:18:55 · 477 阅读 · 0 评论 -
Java 锁系列(一)——锁分类和基础概述
一、乐观锁和悲观锁乐观锁和悲观锁从看待并发问题的不同角度延伸出来的锁概念。1.1 乐观锁乐观的看待并发问题,认为数据不会被修改,所以不对数据上锁,只是在更新的时候判断一下在此期间数据有没有被更新。常见的乐观锁实现方式有“数据版本机制”或“CAS操作”。1.1.1 数据版本机制在表中进行更新数据时,先给数据表加一个版本字段,每成功操作一次记录,记录的版本号+1。先查询那条记录,获取版本字段,更新时判断此刻版本字段的值是否与刚刚查询出来的值相等。相等说明这段时间没有其他程序对其进行操作,可以执行原创 2021-09-23 09:26:51 · 350 阅读 · 0 评论 -
分布式数据库系列(一)——强一致性
1. 什么是强/弱一致性?对于分布式系统而言,一致性是探讨当前系统内的一份逻辑数据存在多个物理的数据副本时,对其执行读写操作会产生什么样的结果。在数据库领域,“一致性”与事务密切相关,又进一步细化到ACID(原子性、一致性、隔离性和持久性)四个方面。在讨论分布式数据库的一直性时,实质上是在讨论数据一致性和事务一致性两个方面。1.1 数据一致性分布式存储系统为了避免设备与网络的不可靠带来额的影响,通常会存储多个数据副本。逻辑上的一份数据同时存储在多个物理副本上,当同时存在读操作和写操作时就带来了原创 2020-09-21 18:33:19 · 6246 阅读 · 0 评论