自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(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 1234

原创 AQS原理

提示:本文需要结合ReadWriteLock和ReentrantLock的原理看会比较清晰文章目录前言一、AQS是什么?二、抽象步骤1.将ReadWriteLock和ReentrantLock代码对比2.重新实现ReentrantLock3.重新实现ReadWriteLock总结前言提示:这里可以添加本文要记录的大概内容:将自己手写的ReadWriteLock和ReentrantLock根据模板方法模式抽象,最后变成AQS提示:以下是本篇文章正文内容,下面案例可供参考一、AQS是什么?AQ

2021-09-01 15:57:21 136

原创 ReadWriteLock的实现

文章目录前言一、ReadWriteLock原理是什么?二、ReadWriteLock的实现过程1.写锁的实现过程2.读锁的实现过程总结前言Lock锁实现到ReentrantLock实现再到ReadWriteLock的实现一、ReadWriteLock原理是什么?读锁可以多个线程共同拥有,写锁只能一个线程使用;读写锁不能同时存在二、ReadWriteLock的实现过程ReadWriteLock的多个重要参数:readcount读计数器,writecount写计数器(重入次数记录),own..

2021-08-26 22:28:23 316

原创 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 284

原创 synchronized原理分析

文章目录前言一、synchronized是如何锁住this对象的?二、synchronized中CAS修改过程1.未锁定变成轻量级锁的原理2.轻量级锁升级为重量级锁的原理三:锁升级的过程总结前言synchronized原理分析。一、synchronized是如何锁住this对象的?堆存放的实例对象信息会有一个对象头,指向方法区中的类(类中存有类方法和类的静态变量)对象,这个对象头就是synchronized需要锁住的东西,其中对象头部包含:Mark Word(堆中的一段内存区域)、clas..

2021-08-19 00:16:25 88

原创 手写Lock实现

文章目录前言一、手写锁需要注意什么?二、手写锁示范1.锁的逻辑说明2.代码示例总结前言使用CAS尝试简单手写锁一、手写锁需要注意什么?手写锁的话需要注意,使用cas操作抢锁;线程为唤醒问题;锁的声明需要使用AtomicReference,不然会出现原子性问题二、手写锁示范1.锁的逻辑说明1、首先两个线程去抢锁,用cas抢锁,线程成功则获取到锁,失败则挂起,挂起后进去队列,等待成功的线程释放锁资源;然后队列中的线程,头部的锁继续去cas抢锁,以此循环2.代码示例代码如下(示例):

2021-08-16 00:02:47 207

原创 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 292

原创 线程可见性问题

一、java内存模型是什么?java内存 模型是描述java语言规范的特性。JVM运行时数据区是描述java虚拟机规范的。含有:当多个线程修改了搞共享内存中的值时,应该读取到那个值的规则,这就是java编程语言内存模型。java内存模型是规则,具体实现规则的是jvm实现。二、多线程中的问题1、所见非所得;2、无法肉眼去检测程序的准确性;3、不同 的运行平台有不同的表现;4、错误很难重现。1.指令重排导致的线程可见性问题代码如下(示例): public stati...

2021-08-10 00:39:25 277

原创 线程池使用

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、pandas是什么? 二、使用步骤 1.引入库 2.读入数据 总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、为什么要用线程池?1、线程在java中是一个对象,更不是操作系统的资源,线程创建、销毁都需要

2021-08-09 23:45:48 1838

原创 线程通讯方式

JDK提供的线程协调APIsuspend/resume(不推荐)、wait/notify、park/unpark文章目录系列文章目录 前言 一、suspend/resume 二、wait/notify 三、park/unpark 总结前言JDK中对于需要多线程协作完成某一任务的场景,提供了对应的API支持。多线程写作的典型场景是:生产者-消费者模型(线程阻塞、线程唤醒)。示例:线程1去蛋挞店买蛋挞,没有蛋挞,则不再执行。线程2生产蛋挞,通知线程1继续执行。

2021-08-04 00:04:55 77

原创 线程状态解释

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言 一、线程状态有哪些? 二、线程状态是如何转换的? 1.引入库 2.读入数据 总结前言线程状态分析提示:以下是本篇文章正文内容,下面案例可供参考一、线程状态有哪些?线程的状态在java.lang.Thread.State中有明确定义;new:尚未启动的线程的线程状态;Runnble:可运行线程的线程状态,等待CPU调度;Blocked:线程阻塞等待监视器锁定

2021-07-28 23:12:15 85

原创 JAVA程序运行原理分析

是JVM用来存储加载的类信息、常量、静态变量、编译后的代码等数据; 虚拟机规范中这是一个逻辑区划; java7中方法区放在永久代中,java8放在元数据空间,并且通过GC机制对这个区域进行管理

2021-07-26 23:11:53 142

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除