![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC并发编程
文章平均质量分 68
不会编程的派大星
Keep Coding!!!
展开
-
闲聊AQS面试和源码解读---可重入锁、LockSupport、CAS;从ReentrantLock源码来看公平锁与非公平锁、AQS到底是怎么用CLH队列来排队的?
AQS原理可谓是JUC面试中的重灾区之一,今天我们就来一起看看AQS到底是什么?这里我先整理了一些JUC面试最常问的问题?1、Synchronized 相关问题以及可重入锁 ReentrantLock及其他显式锁相关问题1、 Synchronized 用过吗,其原理是什么?2、你刚才提到获取对象的锁,这个“锁”到底是什么?如何确定对象的锁3、什么是可重入性,为什么说Synchronized 是可重入锁?4、JVM对Java的原生锁做了哪些优化?5、为什么说Synchronized是非公平锁?原创 2021-08-18 14:32:02 · 397 阅读 · 1 评论 -
准备好了吗?带你读底层!深入理解CAS ,从juc原子类一路追溯到unsafe类再到ABA原子引用!
一:什么是CAS?CAS,在Java并发应用中通常指CompareAndSwap或CompareAndSet,即比较并交换。CAS是一个原子操作 是用于实现多线程同步的原子指令,它比较一个内存位置的值并且只有相等时修改这个内存位置的值为新的值,保证了新的值总是基于最新的信息计算的,如果有其他线程在这期间修改了这个值则CAS失败。CAS返回是否成功或者内存位置原来的值用于判断是否CAS成功。这里我们用一段短代码来说明:这里我们用AtomicInteger类来做测试,其底层也是用CAS原理实现的 ,这个原创 2021-04-29 21:53:06 · 126 阅读 · 1 评论 -
就算错过,也不进来看看?volatile保证可见性、非原子性以及避免指令重排(内存屏障)详解
一.JMM–Java内存模型*1.什么是JMM?JMM : Java内存模型,不存在的东西,是一种概念!是一种约定!*2.关于JMM的一些同步的约定:1、线程解锁前,必须把共享变量立刻刷回主存。2、线程加锁前,必须读取主存中的最新值到工作内存中!3、加锁和解锁是同一把锁。线程工作时,会有自己的一个工作内存,它会主内存之间有相关联系,有八种操作,具体看下列解释和图例:内存交互操作有8种,虚拟机实现必须保证每一个操作都是原子的,不可在分的(对于double和long类型的变量来说,load、st原创 2021-04-28 19:55:37 · 289 阅读 · 1 评论 -
异步回调,用一个例子带你起飞!
1.Future接口Future 设计的初衷: 对将来的某个事件的结果进行建模异步回调:这里基本不怎么直接使用future,而是使用它的一个实现类CompletableFuture,这个类的很多方法都是加强了的,比较怕常用。2.CompletableFuture类接下俩就让我们用一个小例子来看看这个类是怎么来操作异步回调的吧3.简单代码实现*没有返回值的情况:import java.util.concurrent.CompletableFuture;import java.util.原创 2021-04-27 22:31:07 · 194 阅读 · 1 评论 -
ForkJoin、普通方法、stream并行流计算对比
1.什么是ForkJoin?orkJoin 在 JDK 1.7 , 并行执行任务!提高效率。大数据量!大数据:Map Reduce (把大任务拆分为小任务)2.ForkJoin特点工作窃取,这个里面维护的都是双端队列3.ForkJoin结构4.简单代码实现:首先贴出forkjoinTask中的RecursiveTask的实现类import java.util.concurrent.RecursiveTask;/** * @program: juc * @description原创 2021-04-27 10:35:31 · 214 阅读 · 1 评论 -
四大函数式接口以及Stream流式计算
经过近几年计算机行业的发展,新时代的程序员:lambda表达式、链式编程、函数式接口、Stream流式计算1.函数式接口函数式接口: 只有一个方法的接口 Runnable就是一个典型的例子@FunctionalInterface public interface Runnable { public abstract void run(); }// 泛型、枚举、反射 // lambda表达式、链式编程、函数式接口、Stream流式计算 // 超级多FunctionalInterface原创 2021-04-26 20:58:37 · 189 阅读 · 1 评论 -
线程池3大方法、7大参数、4种拒绝策略
1.池化技术程序的运行,本质:占用系统的资源! (优化资源的使用 => 池化技术)线程池、连接池、内存池、对象池///… 创建、销毁。十分浪费资源池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我。2.线程池的好处1、降低系统资源的消耗2、提高响应的速度3、方便管理线程复用、可以控制最大并发数、管理线程3.线程池的三大方法先来看看阿里的开发手册是怎么说使用线程池的吧!简单代码实现:import java.util.concurrent.ExecutorS原创 2021-04-26 18:01:25 · 144 阅读 · 1 评论 -
全是干货---阻塞队列BlockingQueue+BlockingQueue四组API+同步队列SynchronousQueue
1.阻塞队列BlockingQueue简单介绍:其实呐,阻塞队列也不是什么比较新的东西,他也是collection下的一种,与set、list等是同一等级的那什么情况下,在哪种场景下我们会使用到阻塞队列呢?*多线程并发处理,线程池用的较多的时候2.四组API.学会使用四组API —添加、移除(判断队首元素)四组API对比注:超时等待中和有返回值的不同处在于 超时等待中offer(E e, long timeout, TimeUnit unit)有三个参数,而poll(long tim原创 2021-04-25 16:41:04 · 125 阅读 · 1 评论 -
ReadWriteLock,读写锁你真的会用吗?
ReadWriteLock基本介绍独占锁(写锁) 一次只能被一个线程占有共享锁(读锁) 多个线程可以同时占有ReadWriteLock读-读 可以共存!读-写 不能共存!写-写 不能共存!可以多个线程同时读,但只能同时有一个线程去写!简单代码实现:举例说明:这里我们就用一个简单的读写缓存的例子来说明,分用读写锁和不用读写锁两种情况来对比1.主方法public class ReadWriteLockTest { public static void main(原创 2021-04-25 13:59:28 · 144 阅读 · 1 评论 -
JUC的三大常用辅助类,你都知道吗?
1.countDownLatch减法计数器:实现调用几次线程后,在触发另一个任务简单代码实现:*举例说明:就像五个人在同一房间里,有一个看门的大爷,当五个人都出去后,他才能锁门,也就是说 执行5次出门这个动作的线程后,才出发了锁门的这个动作import java.util.concurrent.CountDownLatch;/** * @program: juc * @description * @author: 不会编程的派大星 * @create: 2021-04-24 16:55原创 2021-04-24 18:37:07 · 210 阅读 · 0 评论 -
走进callable,来看看callable是怎么一步步勾搭上Thread的!
1.Callable接口2.Callable与Runnable不同*1.Callable是java.util.concurrent下的接口,有返回值,可以跑出被检查出的异常*2Runable是java.lang下的接口,没有返回值,不可以抛出检查出的异常*3.二者重写调用的方法不同,前者是call(),后者是run()方法*4.Thread实现了Runnable接口,但没有实现Callable3.怎么让Callable一步一步去让Thread实现呢?通过源码和结构我们可以发现。Runnabl原创 2021-04-24 10:49:32 · 200 阅读 · 0 评论 -
写入时复制原理和过程以及CopyOnWriteArrayList源码实现的深入剖析
问题疑问1.为什么要叫写入时复制集合?2.CopyOnWriteArrayList 实现原理是什么?3.CopyOnWriteArrayList 和 ArrayList 有什么区别?4.CopyOnWriteArrayList 复制是怎么进行复制的?接下来就让我们带着这几个问题,从源码入手,来进一步了解写入时复制的原理和过程吧!一:源码分析CopyOnWriteArrayList基本结构参数介绍*1.基于数组实现*2.使用了ReentrantLock互斥锁public class C原创 2021-04-23 20:23:35 · 301 阅读 · 0 评论 -
JUC多线程编程八锁你都知道了吗?关于锁的八个问题
关于锁的八个问题—八锁前面的文章中留下一个疑问,到底什么是锁,锁到底锁的是谁?这里我们就用打电话和发短信的例子来距离说明八锁问题—>锁的是对象方法的调用者或者Class模板(.class)1、标准情况下,两个线程先打印 发短信还是 先打印 打电话?import java.util.concurrent.TimeUnit;/** * @program: juc * @description * @author: 不会编程的派大星 * @create: 2021-04-21 12:42原创 2021-04-21 13:37:20 · 140 阅读 · 0 评论 -
JUC多线程编程之生产者与消费者问题(Synchronized和JUC版)
生产者与消费者问题在面试中,生产者与消费者是高频问题之一1.生产者和消费者问题 Synchronized 版public class A { public static void main(String[] args) { Data data = new Data(); new Thread(() -> { for (int i = 0; i < 10; i++) { try {原创 2021-04-21 11:16:42 · 151 阅读 · 0 评论 -
wait和sleep的区别,Synchronized锁和lock锁的区别你真的搞懂了吗?
一:wait()和sleep()方法1、二者来自不同的类wait ----> Objec类sleep—> Thread类2、关于锁的释放wait 会释放锁sleep 睡觉了,抱着锁睡觉,不会释放!3、使用的范围是不同的wait 必须在同步代码块中使用sleep 可以再任何地方睡眠没错,sleep它就是校长,想在那儿睡就在那儿睡!二:Synchronized锁和lock锁传统Synchronized锁这里我们就用一个多线程买票的例子来说明public class Sal原创 2021-04-21 10:45:11 · 1115 阅读 · 2 评论