随笔分类 - Java / Java线程&JMM
介绍Java线程
摘要:目录1 虚拟线程1.1 前言1.2 虚拟线程介绍1.3 虚拟线程如何被JVM调度1.4 平台线程和虚拟线程的区别1.4.1 虚拟线程始终是守护线程1.4.2 虚拟线程始终具有正常优先级1.4.3 虚拟线程不是线程组的活动成员1.4.4 虚拟线程不支持stop、suspend或resume1.4.5
阅读全文
摘要:[TOC] # 1 ExecutorCompletionService ## 1.1 简介 当我们向`Executor`提交一组任务,并且希望任务在完成后获得结果,此时可以考虑使用`ExecutorCompletionService`。 `ExecutorCompletionService`实现了`
阅读全文
摘要:1 Thread.sleep(0) 1.1 问题引入 先看看一个来自RocketMQ(org.apache.rocketmq.store.logfile.DefaultMappedFile#warmMappedFile)代码里面的for循环,在循环里面,专门有个变量 j,来记录当前循环次数。 第一次
阅读全文
摘要:目录1 CPU模型1.1 CPU Register1.2 CPU Cache Memory1.3 Main Memory1.4 主存存取原理1.5 磁盘存取原理1.6 局部性原理与磁盘预读1.7 索引存储位置2 内存分页2.1 物理内存与虚拟内存2.1.1 物理内存2.1.2 虚拟内存2.2 内存分
阅读全文
摘要:[toc] # 1 CompletableFuture 此文章字数多,实际是例子多,多把例子写几遍,受益颇丰 ## 1.1 简介 `CompletableFuture`是`java.util.concurrent`库在`java 8`中新增的主要工具,同传统的`Future`相比,其支持流式计算、函
阅读全文
摘要:目录1 线程池介绍1.1 线程池概念1.2 线程池好处2 线程池的使用2.1 线程池的创建2.1.1 通过ThreadPoolExecutor创建2.1.2 通过Executors方式创建2.1.3 线程池初始化和容量调整2.2 线程池提交的返回值2.2.1 无返回值2.2.1.1 execute提
阅读全文
摘要:1 多线程中生产者和消费者 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。 1.1 为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处
阅读全文
摘要:1 Fork/Join框架 1.1 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就
阅读全文
摘要:目录1 线程生命周期状态1.1 进程和线程概念1.1.1 Java调度模式1.1.2 进程和线程区别1.2 线程生命状态2 关键字讲解2.1 线程合并join2.2 线程让步yield2.3 线程休眠sleep2.4 线程交互wait,notify,notifyAll2.4.1 线程交换基础2.4.
阅读全文
摘要:目录1 Lock原理1.1 synchronized的缺陷1.2 Lock锁控制并发原理1.3 AQS1.3.1 内部类Node1.3.2 主要属性1.3.3 方法1.3.3.1 获取锁1.3.3.2 释放锁1.4 LockSupport1.5 Lock和synchronized的选择2 java.
阅读全文
摘要:目录1 Synchronized1.1 引言1.2 概念理解1.2.1 不同锁对象1.2.2 对象锁和类锁概念区别1.2.3 同步概念monitorenter&monitorexit1.2.4 Synchronized概念1.2.5 Synchronized阻塞影响1.2.6 为什么Synchron
阅读全文
摘要:目录1 Java对象结构1.1 栈对象概述1.1.1 问题引入1.1.2 基本类型存储位置1.1.3 字长存储是否造成空间浪费1.2 堆对象结构概述1.2.1 堆对象头1.2.1.1 markword1.2.1.2 klass1.2.1.3 数组长度(只有数组对象有)1.2.2 实例数据1.2.3
阅读全文
摘要:1 JMM 学习此篇文章, 先学习基础java内存模型(JMM)基础详解 然后学习入门JMM之并发模型,重排序规则,顺序一致性 1.1 锁 1.1.1 锁的释放-获取建立的happens-before 关系 锁是java并发编程中最重要的同步机制。锁除了让临界区互斥执行外,还可以让释放锁的线程向获取
阅读全文
摘要:1 JMM 所谓JMM就是Java内存模型,看此篇文章先学习java内存模型(JMM)基础详解 1.1 并发编程模型 1.1.1 并发编程模型分类 在并发编程中,我们需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体)。通信是指线程之间以何种机制来交换信息。在
阅读全文
摘要:目录1 CAS1.1 CAS应用分析1.2 CAS原理1.3 CPU锁分类1.4 CAS缺点1.4.1 ABA问题1.4.2 循环时间长开销大1.4.3 只能保证一个共享变量的原子操作1.5 concurrent包的实现1.6 和其他锁比较1.6.1 CAS锁和Synchronized比较2 原子操
阅读全文
摘要:转载于:https://mp.weixin.qq.com/s/EhIJpxRUb26KCJqpFbBCrA 1 JMM 1.1 问题引入 为什么要有内存模型? 要想回答这个问题,我们需要先弄懂传统计算机硬件内存架构。好了,要开始画图了 硬件内存架构图 含有一二三级架构的内存架构图 1.2 CPU模型
阅读全文
摘要:目录1 共享变量1.1 简单理解1.2 CountDownLatch1.3 代码示例1.4 示例说明2 volatile2.1 volatile简介2.2 缓存2.3 使用 1 共享变量 1.1 简单理解 Java并发一直都是开发中比较难也比较有挑战性的技术,对于很多新手来说是很容易掉进这个并发陷阱
阅读全文