![](https://img-blog.csdnimg.cn/b8a61ecf5b144bf0b9a7780a102f9882.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JUC
文章平均质量分 82
JUC:java.util.concurrent包名的简写,是关于并发编程的。
卷心菜sss
这个作者很懒,什么都没留下…
展开
-
线程的中断协商机制interrupt()、isInterrupted()、interrupted()
一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止。所以,Thread.stop, Thread.suspend, Thread.resume 都已经被废弃了。在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的协商机制——中断。中断只是一种协作协商机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自己实现。...原创 2022-08-24 16:39:41 · 262 阅读 · 0 评论 -
Synchronized与锁升级——轻量级锁
轻量级锁是为了在线程近乎交替执行同步块时提高性能。主要目的:在没有多线程竞争的前提下,通过CAS减少重量级锁使用操作系统互斥量产生的性能消耗.说白了先自旋,不行才升级阻寨。原创 2022-08-28 23:33:50 · 868 阅读 · 0 评论 -
LockSupport之等待唤醒机制
LockSupport是什么用于创建锁和其他同步类的基本线程阻塞原语。就是park()和unpark()方法park()方法是unpark()方法是。原创 2022-08-24 17:39:17 · 150 阅读 · 0 评论 -
AQS是什么?
目录AQS是什么 AQS为什么是JUC内容中最重要的基石 进一步理解锁和同步器的关系AQS能干嘛官网解释 AQS内部体系架构 体系架构编辑 队列结构是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石,通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量state表示持有锁的状态通过CAS完成对status值的修改(0表示没有,1表示阻塞)CLH:Craig、Landin and Hagersten 队列,是一个单向链表,AQS中的队列是CLH变体的虚拟双向队列FIF原创 2022-08-29 15:11:05 · 224 阅读 · 1 评论 -
多线程锁:可重入锁(又名递归锁)
在同一个线程在外层方法获取锁的时候,如果内部还有同步方法或者同步代码块,再进入该线程的内层方法会自动获取锁(前提,锁对象得是同一个对象),不会因为之前已经获取过还没释放而阻塞。原创 2022-08-23 21:50:53 · 246 阅读 · 0 评论 -
Synchronized锁升级——重量级锁
Java中synchronized的重量级锁,是基于进入和退出Monitor对象实现的。在编译时会将同步块的开始位置插入monitor enter指令,在结束位置插入monitor exit指令。当线程执行到monitor enter指令时,会尝试获取对象所对应的Monitor所有权,如果获取到了,即获取到了锁,会在Monitor的owner中存放当前线程的id,这样它将处于锁定状态,除非退出同步块,否则其他线程无法获取到这个Monitor。...原创 2022-08-29 10:43:53 · 686 阅读 · 0 评论 -
多线程锁:公平锁和非公平锁
是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取锁,在高并发环境下,有可能造成优先级翻转或。实现方式:ReentrantLock lock = new ReentrantLock(false);实现方式:ReentrantLock lock = new ReentrantLock(true);来获取锁,这里类似排队买票,先来的人先买后来的人在队尾排着,这是公平的。恢复挂起的线程到真正锁的获取还是有时间差的。,很显然非公平锁是比较合适的,因为。(某个线程一直得不到锁)原创 2022-08-23 21:02:31 · 256 阅读 · 0 评论 -
CAS是什么
CAS是英文单词Compare And Swap的缩写,翻译过来就是比较并替换。CAS机制当中使用了3个基本操作数:内存地址V,旧的预期值A,要修改的新值B。更新一个变量的时候,只有当变量的预期值A和内存地址V当中的实际值相同时,才会将内存地址V对应的值修改为B。否则进行自选重新获取。......原创 2022-08-26 12:24:26 · 1269 阅读 · 0 评论 -
Synchronized锁升级——偏向锁
(处于同步块),会把原获得偏向锁的线程升级为轻量级锁后继续执行同步代码块,此时轻量级锁由原持有偏向锁的线程持有,继续执行其同步代码,而正在竞争的线程会 CAS 自旋来获得该轻量级锁,当自旋次数超过一定数量,升级为重量级锁。synchronized属于重量级锁,效率低下,因为监视器锁(monitor)是依赖于底层的操作系统的来实现的,挂起线程和恢复线程都需要转入内核态去完成,,表示发生了竞争,锁己经不是总是偏向于同一个线程了,这个时候会尝试使用CAS来替换MarkWord里面的线程ID为新线程的ID,....原创 2022-08-28 20:14:32 · 258 阅读 · 0 评论 -
Java对象内存布局
在64位系统中,MarkWord占了8个字节,类型指针(没有开启压缩指针)占了8个字节,一共是16个字节,对象头16+实例数据5(int 4 ,boolean 1)+对齐填充3=24字节。填充数据不是必须存在的,仅仅是为了字节对齐这部分内存按8字节补充对齐。,开启后类型指针4字节,由于对其填充,还是会将其补到16字节。存储的是指向该对象类元数据(klass)的首地址。(Field)信息,包括父类的属性信息。+是开启,-就是关闭,所以指令是。在JVM堆里的新生代的伊甸园区。只有对象头的实例对象。.......原创 2022-08-28 15:46:47 · 309 阅读 · 0 评论