![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
文章平均质量分 94
君山李小狼
这个作者很懒,什么都没留下…
展开
-
JUC学习——Synchronized底层原理
java对象头以32位虚拟机为例普通对象(klass word类型指针)数组对象其中Mark world结构为其中1代表启用了偏向锁,0表示没启用Monitor被翻译为监视器或管程(syschronized底层实现原理)每个java对象都可以关联一个Monitor对象,如果使用synchronized给对象上锁(重量级)之后,该对象的Mark word中被设置指向Monitor对象的指针Monitor的结构如下流程:刚开始Monitor中Owner为null当Thread原创 2022-04-13 20:46:37 · 410 阅读 · 0 评论 -
JUC学习(六)——AQS
AQS原理全称:AbstractQueueSynchronizer,是阻塞式锁和相关的同步器工具的框架特点:用state属性表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁a. getState: 获取锁状态b> setState:设置stare状态c> compareAndSetState cas机制设置stare状态提供了基于FIFO的等待队列,类似于Monitor的EntryList条件变量来实现等待,唤醒机制,支持多个条件变量原创 2022-04-13 17:26:39 · 312 阅读 · 0 评论 -
JUC学习笔记(四)——JMM、volatile、单例模式
JMMVolatile是java虚拟机提供的轻量级的同步机制保证可见性不保证原子性禁止指令重排什么是JMM:java内存模型,不存在的东西,是一个概念,约定!关于JMM的一些同步约定:线程解锁前,必须把共享变量立刻刷会主存线程加锁前,必须读取主存中的最新值到工作内存中加锁和解锁是同一把锁内存交互操作有8种,虚拟机实现必须保证每一个操作都是原子的,不可在分的(对于double和long类型的变量来说,load、store、read和原创 2020-09-06 09:45:06 · 243 阅读 · 0 评论 -
JUC学习笔记(三)——线程池及函数式接口
阻塞队列什么情况下我们会使用阻塞队列:多线程并发处理,线程池!学会使用队列!添加移除四组API!方式抛出异常有返回值不抛出异常阻塞等待超时等待添加addofferputoffer(e, int, TimeUnit)移除removepolltake()poll()检测队首元素elementpeek--SynchroniousQueue 同步队列容量为1,队列中元素被消费了才可以继续向队列中添加元素线程池线程池: 三大方法,七大原创 2020-09-05 18:19:30 · 263 阅读 · 0 评论 -
JUC学习笔记(二)——常用的辅助类
CountDownLatch(减法计数器)计数器具体使用,只有计数器归零了主线程才能继续向下执行(即计数器归零后,await()才会被唤醒)public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(6); for (原创 2020-09-05 15:08:06 · 154 阅读 · 0 评论 -
JUC学习笔记(一)——lock和synchronized
什么是JUCjava.util下的这三个包线程和进程进程:一个程序一个进程往往可以包含多个线程,至少包含一个!java默认有几个线程?2个,main,GC对于java而言:Thread,Runnable, Callablejava真的可以开启一个线程么?看下源码:通多调用本地方法,低层c++,java无法直接操作硬件并发,并行并发(多个线程操作同一个资源)CPU一核,模拟出多条线程并行(多个人一起行走)CPU多核,多个线程可以同时执行;线程池public st原创 2020-09-05 10:09:06 · 337 阅读 · 0 评论