![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC学习
文章平均质量分 85
JUC学习
小七学爪哇
这个作者很懒,什么都没留下…
展开
-
Juc01_多线程概述、四种实现方式、常用方法API、生命周期、买票案例、synchronized锁
1.摩尔定律失效(硬件方面):(1) 集成电路上可以容纳的晶体管数目在大约每经过18个月便会增加一倍,可是从2003年开始CPU主频已经不再翻倍,而是采用多核而不是更快的主频(2). 在主频不再提高且核数不断增加的情况下,要想让程序更快就要用到并行或并发编程高并发系统,异步+回调的生产需求(软件方面)原创 2023-12-07 23:31:05 · 862 阅读 · 0 评论 -
Juc02_Synchronized、ReentrantLock实现生产者和消费者问题
①. 生产者消费者模式是一个十分经典的多线程协作的模式,弄懂生产者消费者问题能够让我们对多线程编程的理解更加深刻。所谓生产消费者问题,实际上主要是包含了两类线程:一类是生产者线程用于生产数据一类是消费者线程用于消费数据②. 为了耦合生产者和消费者的关系,通常会采用共享的数据区域,就像一个仓库生产者生产数据之后直接放置在共享数据区中,并不需要关心消费者的行为消费者只需要从共享数据区中获取数据,并不需要关心生产者的行为③.线程四句口诀掌握。原创 2023-12-09 22:06:34 · 358 阅读 · 0 评论 -
Juc03_多线程中的虚假唤醒的产生、问题分析、解决方案
(一个卖面的面馆,有一个做面的厨师和一个吃面的食客,需要保证,厨师做一碗面,食客吃一碗面,不能一次性多做几碗面,更不能没有面的时候吃面;按照上述操作,进行十轮做面吃面的操作)②. 代码展示(两个线程不会出现虚假唤醒问题,三个或多个线程才会出现)原创 2023-12-09 23:22:55 · 408 阅读 · 0 评论 -
Juc04_阻塞队列
①. 什么是阻塞队列?阻塞队列:顾名思义,首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如图所示,当阻塞队列是空时,从队列中获取元素的操作将会被阻塞②. 为什么用?有什么好处?好处是我们不需要关心什么时候需要阻塞线程,什么时候需要唤醒线程,因为BlockingQueue都一手给你包办好了在concurrent包发布以前,在多线程环境下,我们每个程序员都必须自己去控制这些细节,尤其还要兼顾效率和线程安全,而这会给我们的程序带来不小的复杂度。原创 2023-12-10 00:47:37 · 853 阅读 · 0 评论 -
Juc05_线程池概述、创建方式、七大参数、底层工作原理、拒绝策略
如果当前同时运行的线程数量达到最大线程数量并且队列也已经被放满了任务时。原创 2023-12-10 16:03:22 · 798 阅读 · 0 评论 -
Juc06_Lock8锁问题、字节码层面看Synchronized、反编译synchronized锁
(调用指令将会检查方法的 ACC_SYNCHRONIZED 访问标志是否被设置,如果设置了,执行线程会将先持有 monitor 然后再执行方法,最后在方法完成(无论是正常完成还是非正常完成)时释放 monitor)(不一定,如果方法中直接抛出异常处理,那么就是一个 monitorenter 和 monitorexit)作用于实例方法,当前实例加锁,进入同步代码前要获得当前实例的锁。作用于静态方法,当前类加锁,进去同步代码前要获得当前类对象的锁。synchronized 静态同步方法。原创 2024-02-03 14:50:15 · 269 阅读 · 0 评论 -
Juc07_乐观锁和悲观锁、公平锁和非公平锁、递归锁(可重入锁)、死锁及排查、自旋锁
当多个线程同时使用 CAS 操作一个变量时,只有一个会胜出,并成功更新,其余均会失败,但失败的线程并不会被挂起,仅是被告知失败,并且允许再次尝试,当然也允许失败的线程放弃操作。当执行monitorenter时,如果目标锁对象的计数器为零,那么说明它没有被其他线程所持有,Java虚拟机会将该锁对象的持有线程设置为当前线程,并且将计数器加1。在目标锁对象的计数器不为零的情况下,如果锁对象的持有线程时当前线程,那么Java虚拟机可以将其计数器加1,否则需要等待,直到持有线程释放该锁。而当前帐户余额字段(原创 2024-02-03 14:57:33 · 617 阅读 · 0 评论 -
Juc09_CompletableFuture概述、创建方式、常用API、电商比价需求
①. 在Java8中,CompletableFuture提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,并且提供了函数式编程的能力,可以通过回调的方式处理计算结果,也提供了转换和组合CompletableFuture的方法②. 它可能代表一个明确完成的Future,也有可能代表一个完成阶段(CompletionStage),它支持在计算完成以后触发一些函数或执行某些动作③. 它实现了Future和CompletionStage接口。原创 2023-12-06 19:07:06 · 855 阅读 · 1 评论