首页 技术 正文
技术 2022年11月16日
0 收藏 535 点赞 3,261 浏览 1504 个字

简介

同步系列到此就结束了,本篇文章对同步系列做一个总结。

脑图

下面是关于同步系列的一份脑图,列举了主要的知识点和问题点,看过本系列文章的同学可以根据脑图自行回顾所学的内容,也可以作为面试前的准备。

死磕 java同步系列之终结篇

如果有需要高清无码原图的同学,可以关注公众号“彤哥读源码”,回复“sync”领取。

总结

所谓同步,就是保证多线程(包括多进程)对共享资源的读写能够安全有效的运行。

根据同步的运用场景的不同,实现同步的方式也是随之一起变化,但是总结下来,这些实现方式之间又有一些共通之处。

不管是互斥锁、读写锁、信号量、CountDownLatch、回环栅栏、Phaser,还是各种分布式锁,它们都是基于对同一个共享变量(状态变量)的控制,以达到同步的目的。

互斥锁,state为大于等于1(可重入)表示已加锁,state为0表示未加锁;

读写锁,state的高16位存储读的次数【本篇文章由公众号“彤哥读源码”原创】,低16位存储写的次数;

信号量,state存储许可的次数,被使用一次许可减一,被释放一次许可加一;

CountDownLatch,state存储初始次数,countDown()次数减一,当次数减为0的时候await()被激活;

回环栅栏,基于ReentrantLock实现,相当于在CountDownLatch的基础上加了“代”的概念,保证可重复使用;

Phaser,state的高32位存储当前阶段phase,中16位存储当前阶段参与者(任务)的数量parties,低16位存储未完成参与者的数量unarrived,每个阶段的参与者都可以控制,相对于回环栅栏更灵活;

mysql分布式锁,基于数据库的get_lock()/release_lock()对共享变量进行控制;

zookeeper分布式锁,基于有序临时节点对共享变量进行控制;

redis分布式锁,基于内存键值对对共享变量进行控制;

总结下来,所有同步器的关键因素只有一个——共享变量,只要能够对共享变量进行精确的控制,就能实现同步,以后出现新的组件我们一样可以根据这条原理使用新的组件来实现分布式同步器。

彩蛋

下一个系列我们将学习线程(池)相关的知识点,敬请期待!

推荐阅读

1、死磕 java同步系列之开篇

2、死磕 java魔法类之Unsafe解析

3、死磕 java同步系列之JMM(Java Memory Model)

4、死磕 java同步系列之volatile解析

5、死磕 java同步系列之synchronized解析

6、死磕 java同步系列之自己动手写一个锁Lock

7、死磕 java同步系列之AQS起篇

8、死磕 java同步系列之ReentrantLock源码解析(一)——公平锁、非公平锁

9、死磕 java同步系列之ReentrantLock源码解析(二)——条件锁

10、死磕 java同步系列之ReentrantLock VS synchronized

11、死磕 java同步系列之ReentrantReadWriteLock源码解析

12、死磕 java同步系列之Semaphore源码解析

13、死磕 java同步系列之CountDownLatch源码解析

14、死磕 java同步系列之AQS终篇

15、死磕 java同步系列之StampedLock源码解析

16、死磕 java同步系列之CyclicBarrier源码解析

17、死磕 java同步系列之Phaser源码解析

18、死磕 java同步系列之mysql分布式锁

19、死磕 java同步系列之zookeeper分布式锁

20、死磕 java同步系列之redis分布式锁进化史


欢迎关注我的公众号“彤哥读源码”,查看更多源码系列文章, 与彤哥一起畅游源码的海洋。

死磕 java同步系列之终结篇

下一篇: gym101666题解
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,000
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,512
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,358
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,141
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,771
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,849