Java基础-重拾Java并发编程艺术
最近重读机械工业出版社的《Java并发编程的艺术》一书以查漏补缺,其中要点,记录下来作为个人的读书笔记
Qc_Hopkins
这个作者很懒,什么都没留下…
展开
-
重读Java并发编程艺术(8) - Executor框架
1. 简介 1.1 两级调度模型 应用程序通过Executor框架控制上层的调度,将任务映射为固定数量的线程; 下层调度由操作系统内核控制,将线程映射到硬件处理器上,不受应用程序控制。 1.2 Executor框架的结构与成员 1.2.1 结构 三大部分: 任务:包括被执行任务需要实现的接口:Runnable接口或Callable接口。 任务的执行:包括任务执行机制的核心接口Executor,以及继承自Executor的ExecutorService接口。Executor框架由两个关键类实现了Execu原创 2020-11-22 03:38:05 · 157 阅读 · 0 评论 -
重读Java并发编程艺术(8) -Java线程池
1.Java的线程池 1.1 作用 降低资源消耗: 重复利用已创建的线程,降低线程创建和销毁的消耗。 提高响应速度: 任务到达时可以不需要等线程创建而是立即就能执行。 提高线程的可管理性: 线程是稀缺资源,若无限制创建会消耗系统资源和降低系统稳定性。使用线程池可以进行统一分配、调优和监控。 1.2 实现原理 1.2.1 任务处理流程 当提交一个新任务到线程池,处理流程如下: 判断核心线程池里的线程是否都在执行任务。若否,创建一个新的工作线程来执行任务。若是,进入下一流程。 判断工作队列是否已满。若否,原创 2020-11-03 22:27:39 · 167 阅读 · 0 评论 -
重读Java并发编程艺术(7) -Java的并发工具类
1. 计数器 CountDownLatch 1.1 介绍 1.1.1 构造函数 接受一个int类型的参数作为计数器,如果先等待N个任务完成,就传入N。 1.1.2 使用 CountDownLatch的await方法会阻塞当前线程,直到N变成零; 每调用一次 countDown 方法,N就会减1; countDown方法可以用在任何地方,可以是在1个线程里的N个步骤,也可以是N个线程(需将该CountDownLatch对象的引用传入各个线程)。 1.1.3 注意 计数器必须大于等于0,计数器等于0时,调原创 2020-10-25 21:40:57 · 92 阅读 · 0 评论 -
重读Java并发编程艺术(6) -Java的13个原子操作类
文章目录1. 原子更新基本类型类1.1 类1.2 方法1.3 实现原理1.4 Unsafe源码2. 原子更新数组2.1 类2.2 方法3. 原子更新引用类型3.1 类4. 原子更新字段类4.1 类4.2 需要注意的点4.3 示例代码 JDK1.5 开始提供了 Java.util.concurrent.atomic包,基本上都是使用 Unsafe 实现的包装类。 1. 原子更新基本类型类 1.1 类 AtomicBoolean: 原子更新布尔类型 AtomicInteger: 原子更新整型 AtomicLo原创 2020-09-21 00:20:23 · 82 阅读 · 0 评论 -
重读Java并发编程艺术(5) - 并发容器和框架
1. ConcurrentHashMap 1.1 优点 HashMap代替线程不安全 HashTable效率低下(synchronized) ConcurrentHashMap锁分段技术可有效提升并发访问率 1.2 结构 ConcurrentHashMap Segment (一种可重入锁,类似HashMap的数组和链表结构) HashEntry(链表结构元素) 一个ConcurrentHashMap中包含一个Segment数组,每个Segment数组包含一个HashEntry数组,每个HashEnt原创 2020-08-31 01:08:05 · 202 阅读 · 0 评论 -
重读Java并发编程艺术(4) - Java中的锁
1. Lock接口 1.1背景 synchronized 隐式获取锁,简化同步的管理,但是缺乏扩展性。 锁 手动进行锁获取和释放,还具有以下 synchronized 关键字不具备的主要特性: 特性 描述 尝试非阻塞地获取锁 当前线程尝试获取锁,如果这一时刻锁没有被其他线程获取到,这成功获取并持有锁 能被中断地获取锁 与 synchronized 不同,获取到锁地线程能够响...原创 2020-04-25 01:11:44 · 178 阅读 · 0 评论 -
重读Java并发编程艺术(3) - Java并发编程基础
1. 线程 1.1 进程和线程 进程:操作系统资源分配的最小单位。 线程:操作系统调度的最小单位。 一个进程里可以创建多个线程。 1.2 为什么要使用多线程 更多的处理器核心 更快的响应时间 更好的编程模型 1.3 线程优先级 范围1-10,默认值5,优先级高的线程分配更多的时间片。 针对频繁阻塞(休眠或 I/O 操作)的线程需要设置较高优先级 针对偏重计算(需要较多 CPU 时间或者偏...原创 2020-02-16 18:01:40 · 190 阅读 · 1 评论 -
重读Java并发编程艺术(2) - Java内存模型(JMM)
Java内存模型原创 2020-02-07 19:19:22 · 185 阅读 · 0 评论 -
重读Java并发编程艺术(1) - Java并发机制底层实现原理
近来为了查漏补缺,重新拿起机械工业出版社的《Java并发编程的艺术》一书,并提取其中要点总结读书笔记记录下来。 1. 并发编程的问题 1.1 多线程一定快吗? 不一定,因为线程有创建和上下文切换的开销。 1.2 如何减少上下文切换 无锁并发编程: 多线程处理时用一些方法来避免使用锁,如将数据的ID按照Hash算法取模分段,不同线程处理不同段的数据。 CAS算法:Java的Atomic包使用CAS...原创 2020-02-04 22:49:32 · 194 阅读 · 0 评论