![](https://img-blog.csdnimg.cn/20210915091354755.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JUC并发编程
文章平均质量分 86
狂神JUC视频地址:https://www.bilibili.com/video/BV1B7411L7tE
万里顾—程
我变得自信有趣,
允许别人踏入我的生活;
我睡的越来越早,
开始在乎前途和未来,
我知道那个我回来了!
展开
-
CompletableFuture的使用
并行,并发并发:一个实体上,多个任务有序执行并行:多个实体上,多个任务同时执行用户线程用户线程是系统的工作线程,会完成程序需要完成的业务操作守护线程是一种特殊的线程,为其他线程服务的,在后台默默的完成一些系统性的服务,如GC线程;如果用户线程全部结束,意味着程序需要完成的业务操作已经结束了,守护线程就没有必要继续运行了。所以当系统只剩下守护线程的时候,java虚拟机会自动退出。原创 2023-02-07 17:50:52 · 1105 阅读 · 1 评论 -
JUC并发编程——Synchronized锁和 Lock 锁
文章目录JUC并发编程——LOCK 锁1、传统的 Synchronize 锁2、LOCK 锁3、 Synchronize 和 Lock 的区别4、生产者消费者问题4.1、synchronize 版本生产者消费者问题4.2、Lock 版本生产者消费者问题JUC并发编程——LOCK 锁JUCJUC 是 java.util .concurrent 工具包的简称。这是一个处理线程的工具包。并发包中包含了许多并发编程中需要用到的类。JUC 是从JDK 1.5开始出现。JUC 目的就是为了更好的支持高并原创 2021-09-15 09:12:29 · 311 阅读 · 0 评论 -
JUC并发编程——通过八锁现象更好的理解 Synchronized
文章目录JUC并发编程——八锁现象JUC并发编程——八锁现象八锁现象八锁现象,其实就是关于锁的八个问题,通过八个问题,逐渐加深对锁的认识,为了方便演示,这里全部用synchronized。案例一:两个synchronized 同步方法 + 两个线程 + 一个方法调用者package com.cheng.Lock8;public class Test1 { public static void main(String[] args) { BackHome back原创 2021-09-15 15:38:54 · 139 阅读 · 0 评论 -
JUC并发编程——解决集合类不安全
文章目录JUC并发编程——解决集合类不安全1、并发集合2、List 不安全3、Set 不安全4、Map 不安全JUC并发编程——解决集合类不安全1、并发集合在JDK1.5中引入了java.util.concurrent包,在该包中定义了一组线程安全的集合,称为并发集合, 这些集合可以作为同步集合的替代品。非线程安全的集合并发集合共同接口ArrayListCopyOnWriteArrayListListLinkedListConcurrentLinkedQueueQ原创 2021-09-17 08:44:33 · 189 阅读 · 0 评论 -
JUC并发编程——常用的辅助工具类
文章目录JUC并发编程——常用的工具类1、CountDownLatch2、CyclicBarrier3、SemaphoreJUC并发编程——常用的工具类1、CountDownLatchCountDownLatch 简介CountDownLatch 是JUC下面的同步工具类,能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在Cou原创 2021-09-17 19:31:05 · 282 阅读 · 0 评论 -
JUC并发编程——读写锁 ReadWriteLock
文章目录JUC并发编程——读写锁 ReadWriteLock1、ReadWriteLock 简介2、ReadWriteLock 使用3、读写锁比其他锁的优势JUC并发编程——读写锁 ReadWriteLock1、ReadWriteLock 简介ReadWriteLock在java.util.concurrent.locks包中定义了ReadWriteLock接口,该接口中定义了readLock()返回读锁,定义writeLock()方法返回写锁. 一个用于读操作(readLock读锁),一个用于原创 2021-09-18 09:41:22 · 287 阅读 · 0 评论 -
JUC并发编程——BlockingQueue阻塞队列
JUC并发编程——BlockingQueue阻塞队列1、BlockingQueue 简介BlockingQueue:阻塞队列,遵循FIFIO(先进先出)BlockingQueue 提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满;从阻塞队列取数据时,如果队列已空,线程将会阻塞等待直到队列非空。多线程环境中,通过队列可以很容易实现数据共享,比如经典的“生产者”和“消费者”模型中,通过队列可以很便利地实现两者之间的数据共享。生产者是往队列里添加元素的线程原创 2021-09-19 14:48:45 · 185 阅读 · 0 评论 -
JUC并发编程——线程池介绍和底层实现
文章目录JUC并发编程——线程池底层实现1、线程池介绍2、线程池的简单使用3、线程池底层实现3.1、三大方法源码分析3.2、七大参数3.3、四大拒绝策略4、自定义创建线程池JUC并发编程——线程池底层实现1、线程池介绍池化技术池化技术是一种很常见的编程技巧,在请求量大时能明显优化应用性能,降低系统频繁建连的资源开销。我们日常工作中常见的有数据库连接池、线程池、对象池等,它们的特点都是将 “昂贵的”、“费时的” 的资源维护在一个特定的 “池子” 中,规定其最小连接数、最大连接数、阻塞队列等配置,方原创 2021-09-20 08:44:50 · 162 阅读 · 0 评论 -
JUC并发编程——四大内置函数式接口
文章目录JUC并发编程——四大内置函数式接口1、函数型接口2、断定型接口3、消费型接口4、供给型接口JUC并发编程——四大内置函数式接口函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。由于默认方法(default)已经有了实现,所以它们不是抽象方法。如果一个接口中声明的抽象方法是重写了超类Object类中任意一个public方法,那么这些抽象方法并不会算入接口的抽象方法数量中。函数式适用于函数式编程,Java中的函数式编程体现就是原创 2021-09-20 16:43:47 · 147 阅读 · 0 评论 -
JUC并发编程——Stream 流式计算
文章目录JUC并发编程——Stream 流式计算1、Stream 简介2、操作 StreamJUC并发编程——Stream 流式计算1、Stream 简介Stream 简介Stream是 Java8中处理集合的关键抽象概念,它可以指定你希望对集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。使用Stream API(java.util.stream)对集合数据进行操作,就类似于使用SQL执行的数据库查询。也可以使用Stream API来并行执行操作。简而言之,Stream API原创 2021-09-22 15:25:23 · 212 阅读 · 0 评论 -
JUC并发编程——Fork/Jion框架
文章目录JUC并发编程——Fork/Jion框架1、Fork/Jion 框架简介2、Fork/Jion 的使用JUC并发编程——Fork/Jion框架1、Fork/Jion 框架简介Fork/Join 简介:就是在必要的情况下,将一个大任务,进行拆分 (fork) 成若干个小任务(拆到不可再拆时),再将一个个的小任务运算的结果进行 join 汇总。ForkJoin是由JDK1.7后提供多线并发处理框架,ForkJoin的框架的基本思想是分而治之。Fork/Jion 特点:工作窃取注:任务队列原创 2021-09-22 19:13:45 · 209 阅读 · 0 评论 -
JUC并发编程—— CompletableFuture 实现异步回调
JUC并发编程—— CompletableFuture 实现异步回调1、CompletableFuture异步回调异步回调指的是:在发起一个异步任务的同时指定一个函数,在异步任务完成时会自动的调用这个函数,这个函数就是回调函数。CompletableFutureFuture表示一个可能还没有完成的异步任务的结果,针对这个结果可以添加Callback以便在任务执行成功或失败后作出相应的操作。使用 Future 获得异步执行结果时,要么调用阻塞方法get(),要么轮询看isDone()是否为原创 2021-09-23 20:57:08 · 1792 阅读 · 0 评论 -
JUC并发编程—— JMM (Java内存模型)
文章目录JUC并发编程—— JMM (Java内存模型)1、JMM 概述2、JMM 三个特性JUC并发编程—— JMM (Java内存模型)1、JMM 概述什么是 JMMJava内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。内存划分JMM规定了内存主要划分为主内存和工作内存两种。Java内存模型规定了所有的变量都存储在主内存中,每条线程还有原创 2021-09-24 10:23:52 · 383 阅读 · 0 评论 -
JUC并发编程—— volatile 关键字详解
文章目录JUC并发编程—— volatile 关键字详解1、volatile 简介2、可见性和非原子性验证3、volatile与synchronized比较JUC并发编程—— volatile 关键字详解1、volatile 简介并发编程三个特性:1、原子性:一段操作一旦开始就会一直运行到底,中间不会被其它线程打断,这段操作可以是一个操作,也可以是多个操作。2、可见性:当一个线程修改了共享变量的值,其它线程能立即感知到这种变化。3、有序性:在本线程内观察,操作都是有序的;如果在一个线程中观察另外原创 2021-09-26 09:37:23 · 198 阅读 · 0 评论 -
JUC并发编程——CAS 介绍及底层源码分析
文章目录JUC并发编程——CAS 介绍及底层源码分析1、什么是 CAS2、JDK 对 CAS 的支持3、原子类操作源码分析4、原子引用解决ABA问题JUC并发编程——CAS 介绍及底层源码分析1、什么是 CAS前言:使用锁的代价Java并发处理中锁非常重要,但是使用锁会带来下面几个问题:加锁、释放锁会需要操作系统进行上下文切换和调度延时,在上下文切换的时候,cpu之前缓存的指令和数据都将失效,这个过程将增加系统开销。多个线程同时竞争锁,锁竞争机制本身需要消耗系统资源。没有获取到锁的线程会被原创 2021-09-29 21:57:03 · 335 阅读 · 0 评论 -
JUC并发编程—— 各种锁的理解
文章目录JUC并发编程—— 各种锁的理解1、公平锁,非公平锁2、可重入锁3、自旋锁4、死锁JUC并发编程—— 各种锁的理解1、公平锁,非公平锁公平锁是指当锁可用时,在锁上等待时间最长的线程将获得锁的使用权,必须先来后到。//ReentrantLock(true)设置为公平锁public ReentrantLock(boolean fair) { sync = fair ? new FairSync() : new NonfairSync();}非公平锁则随机分配这种使用权,可以插队原创 2021-09-30 13:27:43 · 258 阅读 · 0 评论