![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程专题
文章平均质量分 65
深入理解并发编程
Java程序员调优
Java程序员调优录。
展开
-
【并发编程】知识脉络
一级菜单 二级菜单 三级菜单 synchronize关键字 如何使用 底层原理 锁升级过程 volatile关键字 如何使用 底层原理 java内存模型JMM ThreadLocal 如何使用 内存泄漏 session 线程池 几种线程池及创建方式 线程池参数及意义 使用场景 JUC包的了解 AQS原理 Lo原创 2021-06-28 23:28:52 · 166 阅读 · 0 评论 -
Java并发编程总结【万字无图纯享版】
【并发编程】模块的面试题与答案,纯文字版,不过多讲解,侧重面试中被问到该如何简洁明了的回答。原创 2021-12-05 17:55:52 · 364 阅读 · 0 评论 -
Java共享内存模型下并发编程问题与分析
本文从官网案例分析一下Java共享内存的工作模式的隐患和解决方案。原创 2021-10-29 11:43:07 · 111 阅读 · 0 评论 -
JMM是什么?
系列文章:【并发编程】知识脉络前言 JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。 JMM可以理解为是一个规范,一个抽象概念,并不真实存在。JMM结构Java的并发采用的是共享内存模型线程之间的共享变量存储在主内存(Main Memory)中。 共享变量 <--->主内存 每个线程都有一个私有的本地内存(Local Memory)。 本地内存中存储了该线程以读/写共享变量的副本。 共享变量的副本<--...原创 2021-10-27 23:34:00 · 7207 阅读 · 0 评论 -
Fork/Join框架的使用概述
什么是Fork/Join框架?Fork/Join 框架是 Java7 提供了的一个用于并行执行任务的框架 采用分而治之的理念,并行递归实现小任务然后汇总结果 充分利用cpu执行任务 补充了ThreadPoolExecutor:因为ThreadPoolExecutor中有限的线程数和有限的队列容量因拆分任务而被阻塞无法继续拆分任务或合并任务。Fork/Join框架常见使用方法1.实现countedCompleter去提交任务1-1任务编写/** * @Description :原创 2021-07-22 18:06:51 · 136 阅读 · 0 评论 -
线程池的异常处理
【并发编程】知识脉络中学习和使用了ThreadPoolExecutor线程池但是线程池中的线程执行任务时候出现异常怎么办?该如何处理?目录模拟任务中出现异常第一种情况:对异常不做任何处理任务类:测试类测试结果:第二种情况:throw抛出异常任务类:测试类测试结果第三种情况:捕获异常任务类测试类测试结果总结为避免线程池停止工作,为避免异常被吞,请手动捕获处理异常!模拟任务中出现异常第一种情况:对异常不做任何处理任务...原创 2021-07-20 15:02:27 · 548 阅读 · 0 评论 -
深入理解ThreadPoolExecutor
ThreadPoolExecutor整体图worker是带着任务的thread,最终执行者为worker这个thread。 worker会被放入workers map集合中使用。ThreadPoolExecutor工作流程图ThreadPoolExecutor源码ThreadPoolExecutor主要参数线程池状态//高三位bit位表示状态//111为running private static final int RUNNING = -1 <&l.原创 2021-07-08 23:48:49 · 159 阅读 · 0 评论 -
【图解】什么是线程?
概念是操作系统能够进行运算调度的最小单位。 他被包含在进程内。 是进程中实际运作单位 (可以把线程看作轻量级进程)线程模型ULT/KLTULT——线程的创建维护销毁在用户态完成KLT——线程的创建维护销毁在内核态完成线程状态...原创 2021-07-07 19:09:42 · 136 阅读 · 0 评论 -
从HashMap(JDK1.7到1.8)到ConcurrentHashMap
HashMap源码解释HashMap类public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {}1.单继承自AbstractMap,多实现Map,Cloneable..HashMap成员变量//默认初始容量为 16= 位运算2的4次方static final int DEFAULT_INITIAL_原创 2021-07-06 18:51:25 · 150 阅读 · 0 评论 -
CyclicBarrier是什么?
CyclicBarrier简介和CountDowmLatch相似,当所有线程都到达barrier栏栅时,所有线程再一起向下执行。CountDownLatch是什么?CyclicBarrier使用场景开启多个线程去执行任务最后汇总CyclicBarrier使用demo对比CountDownLatch是什么?中的同一个例子实现如下:@Slf4jpublic class TestCyclicBarrier implements Runnable { private Cycl原创 2021-07-04 15:55:19 · 87 阅读 · 0 评论 -
Semaphore是什么?
Semaphore简介semaphore英文翻译为信号标,它是能控制允许多少线程去访问资源,也可以反馈线程在指定时间是否获得可执行权的信号,从而对这些超时未获取权力的线程做另行安排。Semaphore使用场景从简介中可以得知,semaphore可以限制并发访问数量,即为限流,像是微服务组件hystrix、sentinel等限流中间件都可使用此原理,当然随之而来,那些被限制通行的线程是被丢弃?还是去执行另外的流程,就是“降级服务”。Semaphore使用demo1、定义线程任务+降级服务原创 2021-07-04 15:13:19 · 3488 阅读 · 3 评论 -
ArrayBlockingQueue是什么?
前置知识【1】什么是线程安全?1、线程安全:指多个线程在执行同一段代码的时候采用加锁机制,使每次的执行结果和单线程执行的结果都是一样的,不存在执行程序时出现意外结果。2、线程不安全:是指不提供加锁机制保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。参考文章:什么是线程安全和线程不安全(解释并发问题)前置知识【2】什么是队列?什么是生产者消费者模式?由图可知,多个生产者向队列里放元素,多个消费者在从队列里取出元素。那么问题来了:当队列里是空的时候,消费者来取.原创 2021-07-02 18:47:38 · 2833 阅读 · 7 评论 -
CountDownLatch是什么?
前言多线程,就是带着相同任务的程序,交给多个干活的同时干。那么线程间能不能受我的控制去干活,不要一启动呼啦全执行完了。比如:创建出来3个线程去吃饭睡觉,能不能不要在线程一启动就各干各的?能不能线程启动归启动,干啥归干啥的?比如三个线程启动后,能不能听我口令再吃饭?能不能听我口令等这三兄弟都吃完了再去睡觉,能不能有点礼貌!?CountDownLatch理论实现因为任务是一份,线程是多份。在任务节点上发出线程能感知的信号,即可控制每个来执行此任务的线程。 例如:统一吃饭:停原创 2021-07-02 17:16:14 · 140 阅读 · 1 评论 -
【图解】AQS的queue队列
原创 2021-06-29 15:18:17 · 186 阅读 · 0 评论 -
公平锁&非公平锁对比表格
前言小白看ReentrantLock源码学底层原理文章中主要过了一遍reentrantlock的公平锁的源码。现总结一下理论。公平锁&非公平锁 公平锁 非公平锁 源码异同 都有两个主要方法:lock()加锁方法 和 tryAcquire()锁竞争的方法;并且这两个方法实现的不一样决定了差异。 都共用了一个acquire()方法,因时机不同决定了差异。 竞争锁行为不同 先hasQueuedPredecessors排队去,轮上自己...原创 2021-06-29 11:07:17 · 77 阅读 · 0 评论 -
小白看ReentrantLock源码学底层原理
目录ReentrantLock简介ReentrantLock的使用ReentrantLock底层实现首先带着问题其次带着猜测ReentrantLock源码1. newReentrantLock();FairSyn公平锁 = lock() + tryAcquire();这两个方法互相利用,lock中使用了tryAcquire();FairSync 公平锁源码 大致翻译成人话2. 重点lock()方法分析2-1进到 lock()里唯一的acquire方法2...原创 2021-06-28 22:26:23 · 218 阅读 · 0 评论 -
JAVA并发多线程:卖票例子最简单版(第一集)——代码篇
卖票代码(最初的样子)class TicketForNoSychronized{ //买了多少张? private static Integer saledNum = 0; //还剩多少张?50张!!! private static Integer lastedNum = 50; //注意此处方法为最最最最普通的方法---卖票 public void sale() { //卖之前...原创 2020-03-12 14:48:26 · 413 阅读 · 0 评论