👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙、Spring从成神到升仙系列🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人📝联系方式:hls1793929520,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬👀文章目录深入理解synchronized一、引言二、synchronized基本使用1、同步方法1.1静态方法1.2非静态方法1.3区别2、代码块三、syn
👏作者简介:大家好,我是爱敲代码的小黄,独角兽企业的Java开发工程师,CSDN博客专家,阿里云专家博主📕系列专栏:Java设计模式、数据结构和算法、Kafka从入门到成神、Kafka从成神到升仙、Spring从成神到升仙系列🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦🍂博主正在努力完成2023计划中:以梦为马,扬帆起航,2023追梦人📝联系方式:hls1793929520,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬👀文章目录深入理解synchronized一、引言二、synchronized基本使用1、同步方法1.1静态方法1.2非静态方法1.3区别2、代码块三、syn
1、前言“分而治之”一直是一个非常有效的处理大量数据的方法。著名的MapReduce也是采取了分而治之的思想。。简单地说,就是如果你要处理1000个数据,但是你并不具备处理1000个数据的能力,那么你可以只处理其中的10个,然后分阶段处理100次,将100次的结进行合成,就是最终想要的对原始1000个数据的处理结果。而这就是ForkJoin的基本思想。2、Fork/Join框架Fork一词的原始含义是吃饭用的叉子,也有分叉的意思。在Linux平台中,方法fork()用来创建子进程,使得系统进程可以多一个执行分支。在Java中也沿用了类似的命名方式。而join()方法的含义在之前的章节中已经解释
1、前言为了后面更好的学习锁优化以及运作过程,需要我们对HotSpot虚拟机的Java对象内存布局有一定的了解,也作为技术储备。2、对象的内存布局在HotSpot虚拟机中,对象在堆内存中存储的布局可以划分为三个部分:对象头(Header)、实例数据(InstanceData)、对齐填充(Padding)。而数组对象和普通对象的内存布局存在差异,数组对象相比之前多了数组长度部分。2.1、对象头(Header)HotSpot虚拟机对象的对象头部分包括两类信息:标记字段(MarkWord)。用于存储对象自身的运行时数据,如HashCode(哈希码)、GC分代年龄,锁状态标志,线程持有的锁,偏向线程I
目录1、前言2、什么是ThreadLocal3、ThreadLocal作用4、ThradLocal基本使用4.1、创建和初始化4.2、存储和获取线程变量4.3、清理和释放线程变量4.4、小结4.5、示例代码5、ThreadLocal原理5.1、set()5.2、get()5.3、变量清理5.4、ThreadLocalMap6、InheritableThreadLocal1、前言一般提到多线程并发总是要说资源竞争,线程安全。而通常保证线程安全的其中一种方式便是控制资源的访问,也就是加锁。其实还有另一种方式,那么便是增加资源来保证所有对象不竞争少数资源。比如,有100个人需要填写信息表,如果只有一
1、什么是AtomicAtomic英译为原子的。原子结构通常称为不可分割的最小单位。而在JUC中,java.util.concurrent.atomic包是Java并发库中的一个包,提供了原子操作的支持。它包含了一些原子类,用于在多线程环境下进行线程安全的原子操作。使用原子类可以避免使用锁和同步机制,从而减少了线程竞争和死锁的风险,并提高了多线程程序的性能和可伸缩性。2、为什么要使用Atomic这里是JUC专栏,肯定是跟多线程有关系的。我们实现这样一个场景:2个线程对某个数值+1操作,每个线程累加10000次。2.1、传统模式packageatomic;importjava.util.conc
1、前言JUC包中包含了三个非常实用的工具类:CountDownLatch(倒计数器),CyclicBarrier(循环栅栏),Semaphore(信号量)。2、倒计数器:CountDownLatch2.1、什么是CountDownLatch英文中CountDown意为倒计数,Latch意为门闩,所以简单称之为倒计数器。门闩的含义就是把门锁起来,不让里面的线程跑出来。因此这个工具通常用来控制线程等待。它可以让某一个线程等待直到倒计时结束,在开始执行。来看API文档:相应API:2.2、使用如何使用,JDKAPI文档给出来了示例用法:CountDownLatch(JavaPlatformSE8)
文章目录1.什么是JUC2.进程和线程2.1进程2.2线程2.3并发2.4并行2.5线程的状态2.6wait和sleep的区别3.Lock锁(重点)3.1传统Synchronized3.2Lock接口3.3Synchronized和Lock的区别4.生产者和消费者问题4.1Synchronized版的生产者和消费者问题Synchronized版4.2JUC版的生产者和消费者问题4.3Condition精确的通知和唤醒线程5.八锁现象6.集合类不安全6.1List不安全6.2Set不安全6.3Map不安全7.Callable(简单)8.常用的辅助类(必会)8.1CountDownLatch8.2
前言大概有快两周没有发文了,这段时间不断的充实自己,算算时间,也到了该收获的时候,今天带来一篇JUC详解,但说实话,我也不敢自信它详不详细。JUC说白了就是多线程,学Java不久的人知道多线程,恐怕还不知道JUC是什么。在这篇博客中,博主将对JUC做一个自认为比较全面的讲解,为了方便大家理解,博主尽量用自己的语言给大家总结,避免照搬各种资料里面生涩的文字让大家不解其意,不出意外这篇博客会很长,目前还没办法估计具体多长,但总之应该会比较长。在讲解的同时,博主也会做一些多线程的引申,引申到哪也不好说,只能边写边想,遇到博主自己也不是太理解的,会标注,大家可做查询或讨论。JUC是块硬骨头,你要说难,
1、前言前面两篇中分别讲了Synchronized和ReentrantLock。两种方式都能实现同步锁,且也都能解决多线程的并发问题。那么这两个有什么区别呢?这个也是一个高频的面经题。2、相同点2.1、都是可重入锁什么是可重入锁?可重入锁,也称为递归锁,是指同一线程在外层方法获取锁的时候,在进入内层方法会自动获取锁,也就是说线程可以进入任何一个它已经拥有的锁所同步着的代码块。可重入锁是为了避免死锁而出现的一种锁机制,因为当一个线程在持有锁的同时,再次请求获取锁时,如果不是可重入锁,就会发生死锁的情况。举个例子,当线程A获取了锁之后,在锁还没有释放的情况下,再次尝试获取锁时不会阻塞,而是会自动获