- 博客(12)
- 收藏
- 关注
原创 AQS的使用场景和示例
文章目录前言一、Semaphore的原理和使用场景1.Semaphore是什么?2.如何通过AQS实现Semaphore二、CountDownLatch的原理和使用场景1.CountDownLatch是什么?2.如何通过AQS实现CountDownLatch三、CyclicBarrier的原理和使用场景1.CyclicBarrier是什么?2.如何实现CyclicBarrier总结前言提示:这里可以添加本文要记录的大概内容:例如:学习AQS的使用场景以及自己通过AQS实现Semaphore。..
2021-09-05 22:39:31
1432
原创 AQS原理
提示:本文需要结合ReadWriteLock和ReentrantLock的原理看会比较清晰文章目录前言一、AQS是什么?二、抽象步骤1.将ReadWriteLock和ReentrantLock代码对比2.重新实现ReentrantLock3.重新实现ReadWriteLock总结前言提示:这里可以添加本文要记录的大概内容:将自己手写的ReadWriteLock和ReentrantLock根据模板方法模式抽象,最后变成AQS提示:以下是本篇文章正文内容,下面案例可供参考一、AQS是什么?AQ
2021-09-01 15:57:21
325
原创 ReadWriteLock的实现
文章目录前言一、ReadWriteLock原理是什么?二、ReadWriteLock的实现过程1.写锁的实现过程2.读锁的实现过程总结前言Lock锁实现到ReentrantLock实现再到ReadWriteLock的实现一、ReadWriteLock原理是什么?读锁可以多个线程共同拥有,写锁只能一个线程使用;读写锁不能同时存在二、ReadWriteLock的实现过程ReadWriteLock的多个重要参数:readcount读计数器,writecount写计数器(重入次数记录),own..
2021-08-26 22:28:23
386
原创 ReentrantLock的原理和代码实现
文章目录前言一、ReentrantLock的实现原理?二、代码实现总结前言ReentrantLock锁的原理和代码实现一、ReentrantLock的实现原理?解释:ReentrantLock有两个值需要修改,一个是count值(记录线程的加锁次数),另一个是owner记录获取锁的线程。原理:首先线程在加锁时,需要先对count进行cas操作,判断count是否为0,为0则抢锁将count+1;count不为0判断owner是否为当前线程,是当前线程则count+1,不是当前线程抛异常。其次:.
2021-08-23 22:42:24
435
原创 synchronized原理分析
文章目录前言一、synchronized是如何锁住this对象的?二、synchronized中CAS修改过程1.未锁定变成轻量级锁的原理2.轻量级锁升级为重量级锁的原理三:锁升级的过程总结前言synchronized原理分析。一、synchronized是如何锁住this对象的?堆存放的实例对象信息会有一个对象头,指向方法区中的类(类中存有类方法和类的静态变量)对象,这个对象头就是synchronized需要锁住的东西,其中对象头部包含:Mark Word(堆中的一段内存区域)、clas..
2021-08-19 00:16:25
116
原创 手写Lock实现
文章目录前言一、手写锁需要注意什么?二、手写锁示范1.锁的逻辑说明2.代码示例总结前言使用CAS尝试简单手写锁一、手写锁需要注意什么?手写锁的话需要注意,使用cas操作抢锁;线程为唤醒问题;锁的声明需要使用AtomicReference,不然会出现原子性问题二、手写锁示范1.锁的逻辑说明1、首先两个线程去抢锁,用cas抢锁,线程成功则获取到锁,失败则挂起,挂起后进去队列,等待成功的线程释放锁资源;然后队列中的线程,头部的锁继续去cas抢锁,以此循环2.代码示例代码如下(示例):
2021-08-16 00:02:47
330
原创 CAS原理和源码解析
文章目录一、CAS是什么?二、CAS的原理1.CAS实现过程2.Unsafe实现CAS操作三、CAS的ABA问题一、CAS是什么?CAS是Compare And Swap(比较并替换)的缩写。属于硬件同步原语,处理器提供了基本内存操作的原子性保证。CSAS操作需要输入两个数值,一个旧值A(期望操作前的值)和一个新值B,在操作期间先对旧值进行比较,若没有发生变化,才交换新值,发生变化则不交换。二、CAS的原理1.CAS实现过程线程会先去比较内存中的值与旧值是否相等,相等则将新值替换原来的旧值,否
2021-08-12 00:53:15
420
原创 线程可见性问题
一、java内存模型是什么?java内存 模型是描述java语言规范的特性。JVM运行时数据区是描述java虚拟机规范的。含有:当多个线程修改了搞共享内存中的值时,应该读取到那个值的规则,这就是java编程语言内存模型。java内存模型是规则,具体实现规则的是jvm实现。二、多线程中的问题1、所见非所得;2、无法肉眼去检测程序的准确性;3、不同 的运行平台有不同的表现;4、错误很难重现。1.指令重排导致的线程可见性问题代码如下(示例): public stati...
2021-08-10 00:39:25
315
原创 线程池使用
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、为什么要用线程池?1、线程在java中是一个对象,更不是操作系统的资源,线程创建、销毁都需要
2021-08-09 23:45:48
2000
原创 线程通讯方式
JDK提供的线程协调APIsuspend/resume(不推荐)、wait/notify、park/unpark文章目录系列文章目录 前言 一、suspend/resume 二、wait/notify 三、park/unpark 总结前言JDK中对于需要多线程协作完成某一任务的场景,提供了对应的API支持。多线程写作的典型场景是:生产者-消费者模型(线程阻塞、线程唤醒)。示例:线程1去蛋挞店买蛋挞,没有蛋挞,则不再执行。线程2生产蛋挞,通知线程1继续执行。
2021-08-04 00:04:55
107
原创 线程状态解释
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、线程状态有哪些? 二、线程状态是如何转换的? 1.引入库 2.读入数据 总结前言线程状态分析提示:以下是本篇文章正文内容,下面案例可供参考一、线程状态有哪些?线程的状态在java.lang.Thread.State中有明确定义;new:尚未启动的线程的线程状态;Runnble:可运行线程的线程状态,等待CPU调度;Blocked:线程阻塞等待监视器锁定
2021-07-28 23:12:15
109
原创 JAVA程序运行原理分析
是JVM用来存储加载的类信息、常量、静态变量、编译后的代码等数据; 虚拟机规范中这是一个逻辑区划; java7中方法区放在永久代中,java8放在元数据空间,并且通过GC机制对这个区域进行管理
2021-07-26 23:11:53
170
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人