随笔分类 - JUC并发工具包
摘要:【Beautiful JUC Part.11】Future和Callable治理线程 一、为什么需要Future和Callable 1、Runnable的缺陷 线程没有返回值 run方法无法抛出checked Exception 这是因为run()方法在声明的时候就规定好了形式。只能通过try/ca
阅读全文
摘要:【Beautiful JUC Part.10】AQS 并发灵魂人物 一、为什么需要AQS? 二、Semaphore和AQS的关系 CountDownLatch和ReentrantLock也是一样的。 三、AQS的认识 1、AQS的比喻 比喻:群面、单面 安排就坐、叫号、先来后到等HR的工作就是AQS
阅读全文
摘要:【Beautiful JUC Part.9】控制并发流程 线程间的协调人 一、什么是控制并发流程? 控制能发流程的工具类,作用就是帮助我们程序员更容易得让线程之间合作。 让线程之间相互配合,来满足业务逻辑 比如让线程A等待线程B执行完毕后再执行等合作策略 二、CountDownLatch倒计时门闩
阅读全文
摘要:【Beautiful JUC Part.8】ConcurrentHashMap等并发集合 并发容器概览、集合类的历史、ConcurrentHashMap(重点、面试常考) CopyOnWriteArrayList、并发队列Queue(阻塞队列、非阻塞队列) 一、并发容器的概览 ConcurrentH
阅读全文
摘要:【Beautiful JUC Part.7】fina关键字和不变性 一、什么是不变性(Immutable) 如果对象在被创建后,状态就不能被修改,那么它就是不可变的 例如:person对象,age和name都不能再变。但是如果person对象还有其他非final的属性,就是可变的对象。 具有不变性的
阅读全文
摘要:【Beautiful JUC Part.6】CAS 不可中断的典范 一、什么是CAS 运用场合:并发场景,实现不能被打断的交换操作 主要思路: 我认为V的值应该是A,如果是的话那我就把它改成B,如果不是A(说明被别人修改过了),那我就不修改了,避免多人同时修改导致出错。 CAS有三个操作数: 内存值
阅读全文
摘要:【Beautiful JUC Part.5】atomic包 一刻也不能分割 一、什么是原子类 不可分割 一个操作是不可中断的,即便是多线程的情况下也可以保证 java.util.concurrent.atomic 原子类的作用和锁类似,是为了保证并发情况下线程安全。不过原子类相比于锁,有一定的优势。
阅读全文
摘要:【Beautiful JUC Part.4】不可不说的“锁”事 Lock接口 锁的分类 乐观锁和悲观锁 可重入锁和非可重入锁,以ReentrantLock为例(重点) 公平锁和非公平锁 共享锁和排它锁:以ReentrantReadWriteLock读写锁为例(重点) 自旋锁和阻塞锁 可中断锁:顾名思
阅读全文
摘要:【Beautiful JUC Part.3】ThreadLocal详解 一、两大使用场景——ThreadLocal的用途 1、典型场景1 每个线程需要一个独享的对象(通常是工具类,典型需要使用的类有SimpleDateFormat和Random),比如说后端返回给前端结果的封装工具类。 每个Thre
阅读全文
摘要:【Beautiful JUC Part.2】线程池 治理线程的最大法宝 一、线程池的重要性 1、什么是池 如果不使用线程池,每个任务都新开一个线程处理 一个线程,直接创建 当10个线程时候,for循环创建线程 当任务数量上升到1000 这样开销太大,我们希望有固定的数量的线程,来执行这1000个线程
阅读全文
摘要:【Beautiful JUC Part.1】建立起Java并发体系的大厦 思维导图地址 https://darkerg.lanzout.com/iNtK0zmosmb 密码:91bb 一、并发工具类的分类 为了并发安全:互斥同步、非互斥同步、无同步方案 管理线程、提高效率 线程协作 二、为了线程安全
阅读全文