![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程与线程并发
文章平均质量分 88
静看º一季花开花落
这个作者很懒,什么都没留下…
展开
-
JUC工具类-LockSupport概述
多线程并发场景中,时常需要线程协同,故而需要对当前线程进行阻塞,并唤醒需要协同的线程来一起完成任务。 LockSupport来自于JDK1.5,位于JUC包的locks子包,是一个非常方便实用的线程阻塞工具类,它定义了一组的公共静态方法,这些方法提供了最基本的线程阻塞和唤醒功能,可以在线程内任意位置让线程阻塞、唤醒。在AQS框架的源码中,当需要阻塞或唤醒一个线程的时候,都会使用LockSupport工具来完成。原创 2023-08-26 17:03:44 · 192 阅读 · 0 评论 -
Synchronized与Java线程的关系
Java多线程处理任务时,为了线程安全,通常会对共享资源进行加锁,拿到锁的线程才能进行访问共享资源。而加锁方式通过都是Synchronized锁或者Lock锁。 那么多线程在协同工作的时候,线程状态的变化都与锁对象有关系。如果当前锁已偏向其他线程||epoch值过期||class偏向模式关闭||获取偏向锁的过程中存在并发冲突,都会进入到锁膨胀方法, 在该方法中会进行偏向锁撤销和升级。原创 2023-08-18 15:46:30 · 299 阅读 · 0 评论 -
JUC工具类:CompletableFuture介绍
一些业务场景我们需要使用多线程异步执行任务,加快任务执行速度。JDK5新增了Future接口,用于描述一个异步计算的结果。虽然 Future 以及相关使用方法提供了异步执行任务的能力,但是对于结果的获取却是很不方便,我们必须使用的方式阻塞调用线程,或者使用轮询方式判断任务是否结束,再获取结果。 与此同时,Future无法解决多个异步任务需要相互依赖的场景,简单点说就是,主线程需要等待子线程任务执行完毕之后在进行执行,这个时候你可能想到了,没错确实可以解决。原创 2023-08-07 16:14:59 · 186 阅读 · 0 评论 -
Redission分布式锁详解
在分布式系统中,当不同进程或线程一起访问共享资源时,会造成资源争抢,如果不加以控制的话,就会引发程序错乱。而分布式锁它采用了一种互斥机制来防止线程或进程间相互干扰,从而保证了数据的一致性。 **Redission是一个基于Redis实现的Java分布式对象存储和缓存框架。它提供了丰富的分布式数据结构和服务。**例如:分布式锁、分布式队列、分布式Rate Limiter等。原创 2023-07-27 18:29:38 · 11197 阅读 · 0 评论 -
JUC线程池概述
ThreadPoolExecutor 提供了一些方法,我们可以使用这些方法来查询。原创 2023-05-04 18:19:28 · 95 阅读 · 0 评论 -
JUC工具: FutureTask详解
Future 表示了一个任务的生命周期,是一个可取消的异步运算,可以把它看作是一个异步操作的结果的占位符,它将在未来的某个时刻完成,并提供对其结果的访问。FutureTask 为 Future 提供了基础实现,如获取任务执行结果(get)和取消任务(cancel)等。如果任务尚未完成,获取任务执行结果时将会阻塞。一旦执行结束,任务就不能被重启或取消(除非使用runAndReset执行计算)。原创 2023-05-04 17:41:26 · 210 阅读 · 0 评论 -
AQS数据结构
AQS全称为AbstractQueuedSynchronizer,它提供了一个FIFO队列,可以看成是一个用来实现同步锁以及其他涉及到同步功能的核心组件,常见的有:ReentrantLock、CountDownLatch等。AQS是一个抽象类,主要是通过继承的方式来使用,它本身没有实现任何的同步接口,仅仅是定义了同步状态的获取以及释放的方法来提供自定义的同步组件。原创 2023-05-04 16:24:35 · 185 阅读 · 0 评论 -
Frok/Join框架概述
Fork/Join框架是Java7提供了的一个用于并行执行的任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 Fork递归地将任务分解为较小的独立子任务,直到它们足够简单以便异步执行。 Join 将所有子任务的结果递归地连接成单个结果,或者在返回void的任务的情况下,程序只是等待每个子任务执行完毕。ForkJoinPool很适合执行计算密集型的任务(拆分大任务再汇总小任务计算结果),原创 2023-05-04 14:03:19 · 199 阅读 · 0 评论 -
Java并发 - Java中所有的锁
1、偏向锁通过对比Mark Word(JVM)解决加锁问题,避免执行CAS操作。2、轻量级锁是通过用CAS操作和自旋来解决加锁问题,避免线程阻塞和唤醒而影响性能。3、重量级锁是将除了拥有锁的线程以外的线程都阻塞。4、锁升级方向为无锁-偏向锁-轻量级锁-重量级锁一个Java对象由对象头,实例数据和对齐填充组成,对象头是由对象标记Mark Word和类型指针组成,Word它占8个字节也就是64位。原创 2023-05-03 13:02:27 · 128 阅读 · 0 评论 -
Java并发-理论基础
用户可以使用参数。原创 2023-05-03 11:40:00 · 84 阅读 · 0 评论 -
final详解
针对引用数据类型,final域写针对编译器和处理器重排序增加了这样的约束:在构造函数内对一个final修饰的对象的成员域的写入,与随后在构造函数之外把这个被构造的对象的引用赋给一个引用变量,这两个操作是不能被重排序的。如果可见的,可使用锁或者volatile。1、final域写:禁止final域写与构造方法重排序,即禁止final域写重排序到构造方法之外,从而保证该对象对所有线程可见时,该对象的final域全部已经初始化过。2、final域读:禁止初次读对象的引用与读该对象包含的final域的重排序。原创 2023-04-30 14:21:28 · 188 阅读 · 0 评论 -
volatile详解
对于编译器来说,发现一个最优布置来最小化插入屏障的总数几乎是不可能的,为此,JMM 采取了保守的策略。单例模式的一种实现方式,但很多人会忽略 volatile 关键字,因为没有该关键字,程序也可以很好的运行,只不过代码的稳定性总不是 100%,说不定在未来的某个时刻,隐藏的 bug 就出来了。缓存是分段(line)的,一个段对应一块存储空间,称之为缓存行,它是 CPU 缓存中可分配的最小存储单元,大小 32 字节、64 字节、128 字节不等,这与 CPU 架构有关,通常来说是 64 字节。原创 2023-04-30 14:18:49 · 150 阅读 · 0 评论 -
synchronized详解
在能选择的情况下,既不要用Lock也不要用synchronized关键字,用java.util.concurrent包中的各种各样的类,如果不用该包下的类,在满足业务的情况下,可以使用synchronized关键,因为代码量少,避免出错。任意线程对Object的访问,首先要获得Object的监视器,如果获取失败,该线程就进入同步状态,线程状态变为BLOCKED,当Object的监视器占有者释放后,在同步队列中得线程就会有机会重新获取该监视器。试图获取锁的时候不能设定超时,不能中断一个正在使用锁的线程。原创 2023-04-30 14:15:15 · 356 阅读 · 0 评论 -
多线程与线程并发
多线程与线程并发原创 2022-09-01 12:02:59 · 416 阅读 · 0 评论