![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
文章平均质量分 94
JUC并发编程相关文章
一只特立独行的猪611
这个作者很懒,什么都没留下…
展开
-
JUC并发编程第十四章——线程安全集合类
重点介绍 java.util.concurrent.* 下的线程安全集合类,可以发现它们有规律,里面遍历时如果发生了修改,对于非安全容器来讲,使用机制也就是让遍历立刻失败,抛出ConcurrentModifificationException,不再继续遍历。原创 2024-06-19 11:27:54 · 817 阅读 · 0 评论 -
JUC并发编程第十三章——读写锁、邮戳锁
无锁——>独占锁——>读写锁——>邮戳锁。原创 2024-06-15 19:41:21 · 709 阅读 · 0 评论 -
JUC并发编程第十二章——AQS
这些并发编程中常用的类,底层实现基本上都和AQS有关Semaphore可以看到以上类的内部都有一个继承了AQS的抽象类Sync。进一步理解锁和同步器的关系锁,面向锁的使用者:定义了程序员和锁交互的使用层API,隐藏了实现细节,程序员调用即可实现功能同步器,面向锁的实现者:Java并发大神DoungLee,提出了统一规范并简化了锁的实现,将其抽象出来,屏蔽了同步状态管理、同步队列的管理和维护、阻塞线程排队和通知、唤醒机制等,是一切锁和同步组件实现的----公共基础部分。原创 2024-06-13 17:28:37 · 1278 阅读 · 0 评论 -
JUC并发编程第十一章——Synchronized与锁升级机制
偏向锁:MarkWord存储的是。原创 2024-06-12 17:48:33 · 1245 阅读 · 0 评论 -
JUC并发编程第十章——Java对象内存布局和对象头
1 面试题说下JUC,AQS的大致流程 CAS自旋锁,是获取不到锁就一直自旋吗?CAS和synchronized区别在哪里,为什么CAS好,具体优势在哪里? sychronized底层是如何实现的,实现同步的时候用到了CAS 了吗?具体哪里用到了? 对象头存储那些信息?长度是多少位存储?2 Object object = new Object()谈谈你对这句话的理解?位置所在-------->JVM堆->新生区->伊甸园区 构成布局-------->对象头+实例数据原创 2024-07-04 13:41:41 · 1220 阅读 · 0 评论 -
JUC并发编程第九章——ThreadLocal
ThreadLocal中ThreadLocalMap的数据结构和关系ThreadLocal的key是弱引用,这是为什么?ThreadLocal内存泄漏问题你知道吗?ThreadLocal中最后为什么要加remove方法?方法详细信息返回此线程局部变量的当前线程的“初始值”。该方法将被调用的第一次一个线程访问与可变get()方法,除非线程先前调用的set(T)方法,在这种情况下initialValue方法将不被调用的线程。原创 2024-06-05 23:17:56 · 1368 阅读 · 0 评论 -
JUC并发编程第八章——原子操作类
CountDownLatch 是 Java 中的一个并发工具类,用于协调多个线程之间的同步。其作用是让某一个线程等待多个线程的操作完成之后再执行。它可以使一个或多个线程等待一组事件的发生,而其他的线程则可以触发这组事件。public final int get(int i) //获取 index=i 位置元素的值public final int getAndSet(int i, int newValue)//返回 index=i 位置的当前的值,并将其设置为新值:newValue。原创 2024-06-01 20:43:26 · 1104 阅读 · 0 评论 -
JUC并发编程第七章——CAS
注意:compareAndSet方法有两个参数,第一个参数是希望当前的atomicInterger是多少 (一般就是我们从主内存中拿取当前atomicInterger时候的值) ,第二个参数是希望修改为多少,如果当前atomicInterger的值是我们希望的值,就会修改为我们希望修改的值,反之不会修改。ps:面试时,需要懂Unsafe类,因为说白了原子类靠的是CAS思想,CAS思想落地实现靠Unsafe类的CPU源语级别的汇编操作,但是工作中不要用Unsafe类,因为用不好容易导致内存混乱。原创 2024-05-30 20:00:07 · 1352 阅读 · 0 评论 -
JUC并发编程第六章——volatile与JMM
两个屏障,一个加在volatile写之前的StoreStore屏障,防止上面的写操作和当前volatile写重排;内存屏障(也称内存栅栏,屏障指令等)是一类同步屏障指令,是CPU或编译器在对内存随机访问的操作中的一个同步点,使得此点之前的所有读写操作都执行后才可以开始执行此点之后的操作,避免代码重排序。:处理器在读屏障之后的读操作,都在读屏障之后执行 (因为前面的写屏障已经保证全部写完了,主内存中都是最新数据了)。在store2及其后的写操作执行前,保证Store1的写操作已经刷新到主内存。原创 2024-05-28 18:19:32 · 1032 阅读 · 0 评论 -
JUC并发编程第五章——Java内存模型JMM
CPU的运行并不是直接操作内存而是先把内存里面的数据读到缓存,而内存的读和写操作的时候会造成不一致的问题。JVM规范中试图定义一种Java内存模型来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序再各种平台下都能达到一致性的内存访问效果。,通过这组规范定义了程序中(尤其是多线程)各个变量的读写访问方式并决定一个线程对共享变量的写入以及如何变成对另一个线程可见,关键技术点都是围绕多线程的。● JMM没有那些特征或者它的三大特征是什么?● 你知道什么是Java内存模型JMM吗?原创 2024-05-24 14:07:11 · 489 阅读 · 0 评论 -
JUC并发编程第四章——LockSupport与线程中断
首先,一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,自己来决定自己的命运,所以,Thread.stop,Thread.suspend,Thread.resume都已经被废弃了其次,在Java中没有办法立即停止一条线程,然而停止线程却显得尤为重要,如取消一个耗时操作。因此,Java提供了一种用于停止线程的协商机制----中断,也即中断标识协商机制中断只是一种协作协商机制,Java没有给中断增加任何语法,中断的过程完全需要程序员自行实现。原创 2024-05-22 10:21:05 · 1409 阅读 · 0 评论 -
JUC并发编程第三章——Java中的锁
2.1悲观锁认为自己在使用数据的时候一定有别的线程来修改数据,因此在获取数据的时候会先加锁,确保数据不会被别的线程修改synchronized和Lock的实现类都是悲观锁适合写操作多的场景,先加锁可以保证写操作时数据正确,显示的锁定之后再操作同步资源一句话定义:狼性锁乐观锁认为自己在使用数据的时候不会有别的线程修改数据或资源,所以不会添加锁Java中使用无锁编程来实现,只是在更新的时候去判断,之前有没有别的线程更新了这个数据如果这个数据没有被更新,当前线程将自己修改的数据成功写入。原创 2024-05-15 13:40:55 · 264 阅读 · 0 评论 -
JUC并发编程第二章——CompletableFuture
举例:比如主线程让一个子线程去执行任务,子线程可能比较耗时,启动子线程开始执行任务后,主线程就去做其他事情了,忙完其他事情或者先执行完,过了一会再才去获取子任务的执行结果或变更的任务状态(老师上课时间想喝水,他继续讲课不结束上课这个主线程,让学生去小卖部帮老师买水完成这个耗时和费力的任务)。Future接口(FutureTask实现类)定义了操作异步任务执行一些方法,如获取异步任务的执行结果、取消异步任务的执行、判断任务是否被取消、判断任务执行是否完毕等。原创 2024-05-09 09:40:20 · 989 阅读 · 0 评论 -
JUC并发编程第一章——线程基础知识复习
Monitor其实是一种同步机制,它的义务是保证(同一时间)只有一个线程可以访问被保护的数据和代码,JVM中同步是基于进入和退出监视器(Monitor管程对象)来实现的,每个对象实例都会有一个Monitor对象,Monitor对象和Java对象一同创建并销毁,底层由C++语言实现。○并行(parallel):是在不同实体上的多个事件,是在多台处理器上同时处理多个任务,同一时刻,大家都在做事情,你做你的,我做我的,各干各的。○用户线程:是系统的工作线程,它会完成这个程序需要完成的业务操作。原创 2024-05-08 15:35:51 · 624 阅读 · 0 评论