
Java并发编程的艺术读书笔记
文章平均质量分 88
《Java并发编程艺术》读书笔记
方腾飞 魏鹏 程晓明 著
机械工业出版社
小Cesar
这个作者很懒,什么都没留下…
展开
-
第10章 Executor框架
第10章 Executor框架Java的线程既是工作单元,也是执行机制从JDK 5开始,把工作单元与执行机制分离开来工作单元包括Runnable和Callable执行机制由Executor框架提供10.1 Executor框架简介10.1.1 Executor框架的两级调度模型在HotSpot VM的线程模型中,Java线程(java.lang.Thread)被一对一映射为本地操作系统线程Java线程启动时会创建一个本地操作系统线程该Java线程终止时,这个操作系统线程也会原创 2021-03-02 18:47:39 · 111 阅读 · 1 评论 -
第9章 Java中的线程池
第9章 Java中的线程池使用线程池能带来的好处降低资源消耗通过重复利用已创建的线程降低线程创建和销毁造成的消耗提高响应速度当任务到达时,任务可以不需要等到线程创建就能立即执行提高线程的可管理性线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控9.1 线程池的实现原理当提交一个新任务到线程池时线程池判断核心线程池里的线程是否都在执行任务如果不是,则创建一个新的工作线程来执行任务如果核心原创 2021-03-02 18:38:49 · 80 阅读 · 0 评论 -
第8章 Java中的并发工具类
第8章 Java中的并发工具类在JDK的并发包里提供了几个非常有用的并发工具类CountDownLatch、CyclicBarrier和Semaphore工具类提供了一种并发流程控制的手段Exchanger工具类则提供了在线程间交换数据的一种手段8.1 等待多线程完成的CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作JDK 1.5之后并发包提供的CountDownLatch也可以实现join的功能,并且比join的功能更多CountDo原创 2021-03-02 18:35:03 · 92 阅读 · 0 评论 -
第7章 Java中的13个原子操作类
第7章 Java中的13个原子操作类线程不安全的更新操作,通常会使用synchronized来解决问题从JDK 1.5开始提供了java.util.concurrent.atomic包,这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性(字段)Atomic包里的类基本都是使用Unsafe实现的包装类7.1 原子更新基本类型类使用原子的方原创 2021-03-02 18:34:19 · 83 阅读 · 0 评论 -
第6章 Java并发容器和框架
第6章 Java并发容器和框架6.1 ConcurrentHashMap的实现原理与使用6.1.1 为什么要使用ConcurrentHashMapHashMap可能会导致程序死循环HashTable效率低ConcurrentHashMap使用锁分段技术提升并发访问率6.1.2 ConcurrentHashMap的结构ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成Segment是可重入锁(ReentrantLock),HashEntry则用于原创 2021-03-02 18:31:53 · 116 阅读 · 0 评论 -
第5章 Java中的锁
第5章 Java中的锁5.1 Lock接口如果在try-finally外加锁,如果因为发生异常导致加锁失败,try-finally块中的代码不会执行如果在try{}代码块中加锁失败,finally中的代码无论如何都会执行,但是由于当前线程加锁失败并没有持有lock锁,所以程序会抛出异常5.2 队列同步器队列同步器AbstractQueuedSynchronizer(简称同步器),是用来构建锁或者其他同步组件的基础框架,它使用一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源原创 2021-03-02 18:24:27 · 95 阅读 · 0 评论 -
第4章 Java并发编程基础
第4章 Java并发编程基础4.1 线程简介4.1.1 什么是线程现代操作系统调度的最小单元是线程,也叫轻量级进程(Light Weight Process)在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行4.1.2 为什么要使用多线程更多的处理器核心线程是大多数操作系统调度的基本单元,一个程序作为一个进程来运行,程序运行过程中能够创建多个线程,而一个线程在一个时刻只原创 2021-03-02 18:14:54 · 91 阅读 · 0 评论 -
第3章 Java内存模型
第3章 Java内存模型3.1 Java内存模型的基础3.1.1 并发编程模型的两个关键问题线程之间如何通信及线程之间如何同步通信是指线程之间以何种机制来交换信息,通信机制有两种共享内存:在共享内存的并发模型里,线程之间共享程序的公共状态,通过读写内存中的公共状态进行隐式通信消息传递:在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信同步是指程序中用于控制不同线程间操作发生相对顺序的机制在共享内存的并发模型里,同步是显式进行的。程序员必须显式指定某原创 2021-03-02 18:11:11 · 111 阅读 · 0 评论 -
第2章 Java并发机制的底层实现原理
第2章 Java并发机制的底层实现原理Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终转化为汇编指令在CPU上执行2.1 volatile的应用volatile是轻量级的synchronized,在多处理器开发中保证共享变量的“可见性”即当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值volatile不会引起线程上下文切换和调度1.volatile的定义与实现原理如果一个字段被声明成volatile,Java线程内存模型确保原创 2021-03-02 17:55:20 · 105 阅读 · 2 评论 -
第1章 并发编程的挑战
第1章 并发编程的挑战并发编程的目的是为了让程序运行的更快,但并不是启动更多的线程就能让程序最大限度地并发执行运行中会遇到很多问题,如上下文切换、死锁以及受限于硬件和软件的资源限制等1.1 上下文切换即使是单核处理器也支持多线程执行代码,CPU是通过给每个线程分配CPU时间片来实现多线程的时间片是CPU分配给各个线程的时间,时间片非常短,一般是几十毫秒CPU是通过不停的切换线程执行,因此感觉是多个线程在同时进行CPU通过时间片分配算法来循环执行任务当任务执行一个时间片后会切换到下原创 2021-03-02 11:14:44 · 154 阅读 · 0 评论