随笔分类 -  JUC

摘要:一、JVM层 在java.util.concurrent包下面的很多类为了追求性能都采用了sun.misc.Unsafe类中的CAS操作,从而避免使用synchronized等加锁方式带来性能上的不足。 在sun.misc.Unsafe中CAS方法如下: /** * CAS * @param o 包 阅读全文
posted @ 2023-02-28 23:06 夏尔_717 阅读(126) 评论(0) 推荐(0) 编辑
摘要:一、概述 在并发编程领域,有两大核心问题:一个是互斥,即同一时刻只允许一个线程访问共享资源;另一个是同步,即线程之间如何通信、协作。主要原因是,对于多线程实现实现并发,一直以来,多线程都存在2个问题: 线程之间内存共享,需要通过加锁进行控制,但是加锁会导致性能下降,同时复杂的加锁机制也会增加编程编码 阅读全文
posted @ 2022-12-16 17:39 夏尔_717 阅读(273) 评论(0) 推荐(0) 编辑
摘要:一、概述 条件锁就是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁。 比如,在阻塞队列中,当队列中没有元素的时候是无法弹出一个元素的,这时候就需要阻塞在条件notEmpty上,等待其它线程往里面放入一个元素后,唤醒这个条件notEmpty,当前线程才 阅读全文
posted @ 2022-12-15 18:13 夏尔_717 阅读(98) 评论(0) 推荐(0) 编辑
摘要:一、JVM层 Unsafe.park和Unsafe.unpark是sun.misc.Unsafe类的native方法, public native void unpark(Object var1); public native void park(boolean var1, long var2); 阅读全文
posted @ 2022-12-05 10:29 夏尔_717 阅读(610) 评论(0) 推荐(0) 编辑
摘要:一、概述 ReentrantLock是Java并发包中提供的一个可重入的互斥锁。ReentrantLock和synchronized在基本用法,行为语义上都是类似的,同样都具有可重入性。只不过相比原生的Synchronized,ReentrantLock增加了一些高级的扩展功能,比如它可以实现公平锁 阅读全文
posted @ 2022-12-05 10:21 夏尔_717 阅读(84) 评论(0) 推荐(0) 编辑
摘要:CompletableFuture是对Future的一种强有力的扩展,Future只能通过轮询isDone()方法或者调用get()阻塞等待获取一个异步任务的结果,才能继续执行下一步,当我们执行的异步任务很多,而且相互之前还要依赖结果的时候,可能会创建很多这样的Future,并通过get或者轮询等待 阅读全文
posted @ 2022-09-14 17:03 夏尔_717 阅读(501) 评论(0) 推荐(0) 编辑
摘要:一、类结构及其成员变量 1.1 类结构和注释 类结构代码如下: public class ForkJoinWorkerThread extends Thread { } ForkJoinWorkerThread继承了Thread类,ForkJoinWorkerThread是由ForkJoinPool 阅读全文
posted @ 2022-08-24 23:50 夏尔_717 阅读(175) 评论(1) 推荐(0) 编辑
摘要:一、类结构及其成员变量 1.1 类结构和注释 类前面的注释部分如下: ForkJoinTask是在ForkJoinPool中运行task的基础抽象类,ForkJoinTask是类似于线程的实体,其权重比普通线程要轻得多。大量的task或者task的子类可能由ForkJoinPool中实际的线程来托管 阅读全文
posted @ 2022-08-24 23:49 夏尔_717 阅读(149) 评论(0) 推荐(0) 编辑
摘要:在前面介绍了ForkJoinPool的骨架源码之后,我们来看看ForkJoinPool的核心组成。WorkQueue的源码。 一、类结构及其成员变量 1.1 类结构和注释 WorkQueue是ForkJoinPool的核心内部类,是一个Contented修饰的静态内部类。 /** * Queues 阅读全文
posted @ 2022-08-22 13:31 夏尔_717 阅读(114) 评论(0) 推荐(0) 编辑
摘要:在前文中介绍了如何使用ForkJoinPool和ForkJoin的一些基本原理。现在继续来分析ForkJoin,原本计划从源码开始分析。但是ForkJoinPool的源码太过复杂。后续得分好几部分来讲解。今天先做一个总体的介绍。 一、ForkJoinPool总体介绍 在java中运行ForkJoin 阅读全文
posted @ 2022-08-17 22:25 夏尔_717 阅读(432) 评论(0) 推荐(0) 编辑
摘要:一、简介 ForkJoinPool是自Java7开始,提供的一个用于并行执行的任务框架。广泛用在java8的parallelStream和CompletableFuture中。其主旨是将大任务分成若干小任务,之后再并行对这些小任务进行计算,最终汇总这些任务的结果,得到最终的结果。这个描述实际上比较接 阅读全文
posted @ 2022-08-14 23:47 夏尔_717 阅读(592) 评论(0) 推荐(0) 编辑
摘要:一、简介 AtomicIntegerArray可以用原子方式操作其元素的int数组,是对Integer数组支持的原子性操作。原子数组类与对应的普通原子类相比,只是多了通过索引找到内存中元素地址的操作而已。 注意:原子数组并不是说可以让线程以原子方式一次性地操作数组中所有元素的数组,而是指对于数组中的 阅读全文
posted @ 2022-06-30 16:32 夏尔_717 阅读(240) 评论(0) 推荐(1) 编辑
摘要:一、简介 AtomicStampedReference可以给引用加上版本号,追踪引用的整个变化过程,如:A -> B -> C -> D - > A,通过AtomicStampedReference可以知道引用变量中途被更改了3次。但是有时候不需要关心引用变量更改了几次,只是单纯的关心是否更改过,所 阅读全文
posted @ 2022-06-29 16:19 夏尔_717 阅读(64) 评论(0) 推荐(0) 编辑
摘要:一、简介 AtomicReference和AtomicInteger非常类似,不同之处就在于AtomicInteger是对整数的封装,而AtomicReference则对应普通的对象引用。也就是说它可以保证你在修改对象引用时的线程安全性。 AtomicReference是作用是对"对象"进行原子操作 阅读全文
posted @ 2022-06-28 16:53 夏尔_717 阅读(241) 评论(0) 推荐(0) 编辑
摘要:一、简介 AtomicStampedReference是java并发包下提供的一个原子类,它能解决其它原子类无法解决的ABA问题。 二、ABA 2.1 ABA问题 ABA问题发生在多线程环境中,当某线程连续读取同一块内存地址两次,两次得到的值一样,它简单地认为“此内存地址的值并没有被修改过”,然而, 阅读全文
posted @ 2022-06-27 11:32 夏尔_717 阅读(64) 评论(0) 推荐(0) 编辑
摘要:一、简介 在java.util.concurrent.atomic包中,由三个比较特殊的原子类:AtomicIntegerFieldUpdater、AtomicLongFieldUpdater、AtomicReferenceFieldUpdater。 通过名称可以看到,这几类的功能大致相同,只是针对 阅读全文
posted @ 2022-06-26 16:53 夏尔_717 阅读(110) 评论(0) 推荐(0) 编辑
摘要:阿里《Java开发手册》最新嵩山版在20年8月3日发布,其中有一段内容如下: 【参考】volatile解决多线程内存不可见问题。对于一写多读,是可以解决变量同步问题,但是如果多写,同样无法解决线程安全问题。 说明:如果是count++操作,使用如下类实现: AtomicInteger count = 阅读全文
posted @ 2022-06-25 16:53 夏尔_717 阅读(81) 评论(0) 推荐(0) 编辑
摘要:一、简介 AtomicInteger应该是atomic框架中用得最多的原子类了。顾名思义,AtomicInteger是Integer类型的线程安全原子类,可以在应用程序中以原子的方式更新int值。 AtomicInteger的本质:自旋锁 + CAS原子操作。原子操作是多个线程同时执行,确保其是安全 阅读全文
posted @ 2022-06-24 16:51 夏尔_717 阅读(221) 评论(0) 推荐(0) 编辑
摘要:一、简介 Unsafe类在JDK源码中被广泛使用,在Spark使用off-heap memory时也会使用到,该类功能很强大,涉及到类加载机制(深入理解ClassLoader工作机制),其实例一般情况是获取不到的,源码中的设计是采用单例模式,不是系统加载初始化就会抛出SecurityExceptio 阅读全文
posted @ 2022-06-23 16:34 夏尔_717 阅读(346) 评论(0) 推荐(0) 编辑
摘要:一、概述 java的java.util.concurrent包除了提供底层锁、并发集合外,还提供了一组原子操作的封装类,它们位于java.util.concurrent.atomic包。 Atomic类是通过无锁(lock-free)的方式实现的线程安全(thread-safe)访问。 二、原子类底 阅读全文
posted @ 2022-06-20 22:55 夏尔_717 阅读(296) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示