
JUC
文章平均质量分 91
AIL1
这个作者很懒,什么都没留下…
展开
-
一文搞懂AQS
AQS的核心思想:如果被请求的共享资源关闭,那么就将请求资源的线程设置为有效的工作线程,将共享资源设置为锁定状态;如果共享资源被占用,就需要一定的阻塞等待唤醒机制来保证锁分配。这个机制主要使用CLH队列的变体来实现的,将暂时获取不到锁的线程加入到队列中。AQS中的队列是CLH变体的虚拟双向队列(FIFO),AQS通过将每条请求共享资源的线程封装成一个节点来实现锁的分配。主要原理图如下:AQS使用一个volatile的int类型的成员变量来表示同步状态,通过CAS对state值的修改。原创 2024-12-31 20:46:49 · 645 阅读 · 0 评论 -
volatile关键字
指令重排序是指在不影响单线程程序执行结果的前提下,编译器和处理器为了优化程序的性能,对指令的执行顺序进行重新排列的一种优化技术。原创 2024-12-04 15:24:46 · 751 阅读 · 0 评论 -
synchronized底层原理
原子性synchronized和volatile特性上最大的区别就是原子性,volatile不具备原子性。可见性有序性可重入性2.2 静态同步方法2.3 同步方法块三、synchronized的底层实现JVM中,对象在内存中分为三块区域在Hotspot虚拟机中,Monitor是由ObjectMonitor实现的,源码时C++语言实现的,想深入了解的可以下载Hotspot的源码,我们在这里只是简单介绍一下数据结构从上图可以总结获取Monitor和释放Monitor的流程如下:查看的字节码指原创 2024-11-27 16:40:00 · 1216 阅读 · 0 评论 -
一文搞懂锁基础
锁用于控制对共享资源的访问,以确保在能够访问被保护的资源,从而避免数据竞争和不一致性等问题。原创 2024-11-20 10:24:20 · 1060 阅读 · 0 评论 -
并发编程理论
原子性在一次或多次操作中,要么所有的操作都执行,要么所有操作都不执行。i0thread1thread2i10000i++2000i++操作实际上包含了读取i的值、将其加1、再将结果写回i这三个步骤,它不是一个原子性操作。可见性是指一个线程对共享变量进行修改,另一个线程立即得到修改后的最新值。flagfalseflagtrueflagflagtrue有序性程序中代码执行的顺序,Java在编译时和运行时会对代码进行优化,会导致程序最终的执行顺序不一定就是我们编写代码时的顺序。原创 2024-11-16 15:47:16 · 851 阅读 · 0 评论 -
线程的创建
本篇文档代码较多,可以先搜一下多线程debug的技巧。原创 2024-11-12 21:29:59 · 765 阅读 · 0 评论 -
线程和进程
线程是CPU调度的最小单位,是独立执行的路径。进程是系统进行资源分配和调度的基本单位,是线程的集合,一个进程出来包含多个线程之外,还有其余的共享变量空间。原创 2024-11-11 11:18:10 · 243 阅读 · 0 评论