![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
文章平均质量分 61
java.util.concurrent简称JUC。现在所有的公司都对提高CPU利用率很重视,企业是为了挣钱,这样就可以提高效率,甚至是可以裁员,所以学好该技术至关重要!
Be explorer
分享日常学习笔记和实战经验,开源NB
展开
-
JUC篇——CompletableFuture实现异步编排,涵盖全部编排功能API,详细讲解异步编排实战场景,一篇文章彻底拿下!
CompletableFuture介绍:CompletableFuture 是 Java 8 中新增的一个异步编程工具类,基于 Future 和 CompletionStage 接口构建。它支持 lambda,通过回调利用非阻塞方法,提升了异步编程模型。主要用于异步执行任务并返回结果,实现异步计算和操作组合。它提供了一种灵活、可组合的方式来实现异步计算,同时也提供了异常处理、取消、超时等特性。原创 2024-01-15 09:36:16 · 1661 阅读 · 0 评论 -
深入理解CAS、unsafe类和ABA问题解决
A和B同时拿到了主存中相同的数据,B线程以很快的时间对数据进行了修改,并且又以很快的速度还原回了原来的数据,那么此时A线程却不知情主存中的数据发生了修改,所以A线程还是照旧执行他的任务,没有任何的反应。这里也用到了一个底层的CAS:比较当前工作内存中的值和主内存中的值,如果这个值是期望的,那么执行操作,如果不是就一直循环,因为这里用到了一个。之前学习的原子类的底层用的就是CAS,是compareAndSet的缩写,比较并交换的意思。而unsafe类是Java留的一个后门,我们也可以通过这个类来操作内存!原创 2023-10-15 16:47:46 · 82 阅读 · 0 评论 -
深入理解Java中涉及的各种锁
只有当A线程拿到锁,执行完业务代码,释放锁,B线程才能获得锁,执行他的业务代码,因为线程B可能会在线程A执行的时候想要拿到锁,但是A没释放锁,线程B一直会在得到锁的myLock方法中的while中死循环,即持续自旋。自旋锁的底层原理就是一个while循环,如果条件不满足,就会一直处在while循环中出不来,其他的线程也就拿不到对应的锁,不能执行对应的任务,因此就保证了线程的安全。线程A执行完sms方法,并不会释放锁,反而会进入到call方法中,当call方法执行完毕才真正释放锁,然后B线程才会执行。原创 2023-10-15 16:52:06 · 50 阅读 · 0 评论 -
深入学习JMM、Volatile认识和三大特性(一篇文章搞定!)
二、JMM关于同步的约定1、线程解锁前,必须把共享的变量立刻刷回主存线程执行的时候,会将主存中的共享变量拷贝一份到线程独有的工作内存中,当线程任务执行完毕,如果该变量发生了改变,那么在解锁前必须把变动的数据刷新到主存中2、线程加锁前,必须读取主存中最新的值到线程独有的工作内存中3、加锁跟解锁必须保证是同一把锁三、JMM对线程在主存和工作内存中交互机制,有八种操作(write和store写反了哈)原创 2023-09-06 17:31:55 · 207 阅读 · 4 评论 -
Future异步回调
调用CompletableFuture.supplyAsync方法,里面传递一个供给型接口,如果想返回调用成功的值或者调用失败的返回值,需要用到whenComplete方法。使用了runAsync方法,里面传一个Runnable接口。常用他的实现类CompletableFuture。相当于之前学习的Ajax。1、无返回值的异步回调。2、有返回值的异步回调。原创 2023-09-05 18:07:34 · 191 阅读 · 2 评论 -
ForkJoin 解决高并发任务执行工作
ForkJoin是在jdk1.7之后提出来的,在大数据量下并行执行任务,可以提高效率!通常是把大的任务拆分成小的任务,最后再进行合并原创 2023-09-05 18:05:31 · 241 阅读 · 1 评论 -
四大函数式接口
简化编程模型,在新版本的框架底层中会大量的使用,配合Lambda表达式,其一是学会读懂框架底层代码,其二是学习这种开发规范。Java中内置的四种函数式接口,因为这四种函数式会经常用到,所以就直接用即可,重中之重是要了解这四种函数式接口的各自的特点。Function函数式接口,一般都有一个输入参数和一个输出参数,以Function接口为例,输入一个T,返回一个R。该类接口只有一个输入参数,并且也是一个函数式接口,他唯一的方法的返回值是布尔类型。只要是函数式接口,都可以用lambda表达式进行简化。原创 2023-09-05 17:59:47 · 450 阅读 · 1 评论 -
JUC篇——深入理解线程池(深入学习,常见面试题涵盖自定义线程池,常见拒绝策略!!!!!!)
该文章包含了关于线程池的所有常见的知识点,也是面试线程池必问题,比如线程池三大创建方式、线程池7大参数、4大拒绝策略以及CPU密集型和IO密集型详细介绍,欢迎交流学习!原创 2023-09-05 17:50:37 · 100 阅读 · 0 评论 -
同步队列SynchronousQueue
注意:SynchronousQueue同步队列和其他的BlockingQueue不一样,SynchronousQueue不存储元素,put了一个元素,必须从里面先take取出来,否则不能再put进去值!同步队列不像阻塞队列那样可以设置容量,进去一个元素。必须等待取出来之后,才能往里面放一个元素。队列中的数据只有取出来之后才能再往里面放。原创 2023-09-05 17:37:12 · 132 阅读 · 0 评论 -
阻塞队列(BlockingQueue四组API)
不抛出异常,并且能够获得返回值,如果存取值超出队列的大小,那么就会返回一个值,不会抛出异常,如果企业中需要这个业务,使用这个解决方案即可。如果队列满了或者移除的时候没有这个元素,那么他就会一直处于阻塞状态,程序不会停止。如果队列满了,此时会发生阻塞,但是可以存在阻塞超时,超时后就不再等待。添加数据用add,移除数据用remove方法。一、了解什么是阻塞队列。查看队列中队首的元素。原创 2023-09-02 19:55:32 · 278 阅读 · 0 评论 -
读写锁(ReadWriteLock)
ReadWriteLock是一个接口,常用他的实现类ReentrantReadWriteLock,使用这个类,读的时候可以被多个阅读器线程同时读,写的时候只能有一个线程去写,这样就可以提高程序的性能,而且写入的时候是安全的。这两把锁的开锁和关锁的方法和Lock锁的方法一样,都是lock()方法和unlock()方法。一个线程写入的时候并没有达到只写的效果,比如写入3,紧接着就写入4,并不是执行写入3 OK。实现了写入的时候只有一个线程去写,而读取的时候可以多个阅读器同时读取的效果。原创 2023-09-02 00:11:05 · 129 阅读 · 0 评论 -
JUC中常用的辅助类
JUC中常用的辅助类,解决并发编程中的常见计数问题,并发互斥等问题~原创 2023-09-01 23:04:22 · 125 阅读 · 0 评论 -
常规的Map集合并发下不安全原因及解决方案(ConcurrentHashMap)
方案1:所有集合的顶部有一个Collections工具类,里面有给普通Map集合上锁的方法。方案2:通过JUC提供的一个ConcurrentHashMap类,来实现并发线程安全。一、常规的Map集合并发下不安全。原创 2023-09-01 22:53:04 · 428 阅读 · 0 评论 -
常规的Set集合并发下不安全原因及解决方案(CopyOnWriteArraySet)
当然,和解决List集合不安全的方式一样,推荐使用JUC提供的类,因为他的底层是通过Lock锁来实现解决并发问题的,而Collections工具类提供的方法是给普通的Set集合上一把synchoried锁,synchoried锁效率要低于Lock锁。方案2:使用JUC提供的一个类CopyOnWriteArraySet,原理和解决list集合不安全一样。方案1:所有集合的顶部有一个Collections工具类,里面有给普通Set集合上锁的方法。一、普通的Set集合在并发下是不安全的。原创 2023-09-01 22:49:11 · 166 阅读 · 0 评论 -
常规List集合在并发下不安全原因及解决方案(CopyOnWriteArrayList)
写入时复制,简称COW,计算机程序设计领域的一种优化策略,当有多个线程调用的时候,list是唯一的,读取的是固定的,写入的时候可能存在覆盖前一个人写的内容,那么现在就可以先将原本的内容复制一份,执行插入等操作,然后在将新的数据插入回去,保证线程的安全的类。方案2:所有集合的顶部有一个Collections工具类,里面有给普通List集合上锁的方法。方案1:把普通的list集合换成Vector集合,他在java中是安全的。一、常规的集合在并发的情况下是不安全的。成功解决了并发修改异常的问题。原创 2023-09-01 22:43:40 · 197 阅读 · 0 评论 -
八锁现象(彻底理解什么是锁)
主要就是搞清楚锁的对象是什么,new出来的是具体的对象,可以不唯一,但是通过static修饰的同步方法,是锁的全局唯一的Class模板。原创 2023-09-01 18:17:59 · 101 阅读 · 0 评论 -
Condition实现精准通知和唤醒线程
这篇文章,衔接多线程中线程协作,引出Condition在原有的Lock锁基础上实现精准通知和唤醒线程。完成需求中提到的,A线程执行完调用B,B执行完调用C,C执行完调用A。需求:A线程执行完调用B,B执行完调用C,C执行完调用A。请耐心读完下面的代码,会让你彻底学会精准通知和唤醒线程!原创 2023-08-31 23:27:10 · 123 阅读 · 0 评论