![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
文章平均质量分 56
StrangerIt
这个作者很懒,什么都没留下…
展开
-
ReentrantLock详解(公平锁)
一、概述ReentrantLock是一种基于AQS框架的应用实现,是JDK中的一种线程并发访问的同步手段,它的功能类似于synchronized是一种互斥锁,可以保证线程安全。而且它具有比synchronized更多的特性,比如它支持手动加锁与解锁,支持加锁的公平性。AQS定义了一套多线程访问共享资源的同步器框架,是一个依赖状态(state)的同步器ReentrantLock内部定义Sync实现了AbstractQueuedSynchronizer,公平锁、非公平锁都实现Sync公平锁 F原创 2021-06-17 20:33:56 · 1698 阅读 · 0 评论 -
并发三大特性
可见性当一个线程修改了共享变量的值,其他线程能够看到修改的值。Java 内存模型是通过在变量修改后将新值同步回主内存,在变量读取前从主内存刷新变量值这种依赖主内存作为传递媒介的方法来实现可见性的。如何保证可见性如何保证可见性通过 内存屏障保证可见性。通过 synchronized 关键字保证可见性。通过 lock保证可见性。通过 final 关键字保证可见性有序性即程序执行的顺序按照代码的先后顺序执行。JVM 存在指令重排,所以存在有序性问题。如何保证有序性通过 volatile原创 2022-05-05 22:43:21 · 198 阅读 · 0 评论 -
JVM执行模式
一、解释模式通过解释器(Bytecode Interpreter)解释执行特点:启动快(不需要编译),执行慢可通过-Xint参数指定为纯解释模式二、编译模式由JIT(Just In-Time Compiler)编译为本地代码(C语言实现)执行特点:启动慢(编译过程较慢),执行快可通过-Xcomp参数指定为纯编译模式三、混合模式(默认)混合使用解释器 + 热点代码编译起始阶段采用解释执行热点代码检测(HotSpot),默认-XX:CompileThre原创 2022-04-30 17:28:47 · 253 阅读 · 0 评论 -
synchronized如何保证原子性、可见性、有序性
原理原子性:加锁和释放锁;可见性: 加了Load屏障和Store屏障,释放锁flush数据,加锁会refresh数据;有序性:Acquire屏障和Release屏障,保证代码块内部可以重排,但是代码块内部和代码块外部的指令是不能重排的。如何保证原子性:java对象是分为对象头和实例变量两块,其中实例变量就是对象那些变量数据,然后对象头包含了两块内容,一是 Mark Word(含hashCode、锁数据、GC数据等),另一个是Class Metadata Address(包含了指向类的元数据指针转载 2022-04-27 23:54:37 · 1558 阅读 · 0 评论