Java并发编程的艺术
hello酷狗青春
你不勇敢,没人替你坚强。
展开
-
【Java并发编程的艺术】读书笔记第一章
第一章: 多线程执行任务存在的问题:上下文切换,死锁,受限于硬件和软件的资源限制。即使是单核处理器也支持多线程执行代码,CPU通过给每个线程分配CPU时间片来实现这个机制。时间片是CPU分配给各个线程的时间,因为时间片非常短,所以CPU通过不停地切,换线程执行,让我们感觉多个线程是同时执行的,时间片一般是几十毫秒(ms)。所以任务从保存到再加载的过程就是一次上下文切换,上下文切换也会影...原创 2019-03-26 17:37:20 · 246 阅读 · 0 评论 -
【Java并发编程的艺术】读书笔记第二章
Java中所使用的并发机制依赖于JVM的实现和CPU的指令。 volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值,它不会引起线程上下文的切换和调度。Java编程语言允许线程访问共享变量,为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。 如果一个...原创 2019-03-26 20:44:56 · 118 阅读 · 0 评论 -
【Java并发编程的艺术】读书笔记第三章
Java内存模型的基础 Java内存模型中的顺序一致性 同步原语 Java内存模型的设计 并发编程中,需要处理两个关键问题:线程之间如何通信及线程之间如何同步(这里的线程是指并发执行的活动实体),线程之间的通信机制有两种:共享内存和消息传递。 同步是指程序中用于控制不同线程间操作发生相对顺序的机制。Java的并发采用的是共享内存模型。 Java线程之间的通信由Java内存模型(本文简称为...原创 2019-03-27 19:58:28 · 178 阅读 · 0 评论 -
【Java并发编程的艺术】读书笔记第四章
线程作为操作系统调度的最小单元。 在一个进程里可以创建多个线程,这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时执行。 使用多线程的原因主要有以下几点: 更多的处理器核心 更快的响应时间 更好的编程模型 线程分配到的时间片多少也就决定了线程使用处理器资源的多少,而线程优先级就是决定线程需要多或者少分配一...原创 2019-03-28 11:45:35 · 136 阅读 · 0 评论 -
【Java并发编程的艺术】读书笔记第五章
Lock接口 锁是用来控制多个线程访问共享资源的方式。一般一个锁能够防止多个线程同时访问共享资源(但是有些锁可以允许多个线程并发的访问共享资源,比如读写锁)。 Java SE 5之后新增了Lock接口(以及相关实现类)用来实现锁功能。它提供了与synchronized关键字类似的同步功能,只是在使用时需要显式地获取和释放锁。虽然它缺少了(通过synchronized块或者方法所提供的)隐式获取...原创 2019-03-28 16:23:10 · 240 阅读 · 0 评论 -
【Java并发编程的艺术】读书笔记第六章
并发编程大师Doug Lea不遗余力地为Java开发者提供了非常多的并发容器和框架。 ConcurrentHashMap的实现原理与使用 在并发编程中使用HashMap可能导致程序死循环。 (1)线程不安全的HashMap HashMap在并发执行put操作时会引起死循环,是因为多线程会导致HashMap的Entry链表形成环形数据结构,一旦形成环形数据结构,Entry的ne...原创 2019-03-28 17:26:48 · 173 阅读 · 0 评论 -
【Java并发编程的艺术】读书笔记第七章
Java从JDK 1.5开始提供了java.util.concurrent.atomic包(以下简称Atomic包),这个包中的原子操作类提供了一种用法简单、性能高效、线程安全地更新一个变量的方式。 在Atomic包里一共提供了13个类,属于4种类型的原子更新方式,分别是原子更新基本类型、原子更新数组、原子更新引用和原子更新属性(字段)。 ·AtomicBoolean:原子更新布尔类型。 ·At...原创 2019-03-29 08:48:03 · 169 阅读 · 0 评论 -
【Java并发编程的艺术】读书笔记第八章
**CountDownLatch**、**CyclicBarrier**和**Semaphore**工具类提供了一种并发流程控制的手段,**Exchanger**工具类则提供了在线程间交换数据的一种手段。 CountDownLatch允许一个或多个线程等待其他线程完成操作。 CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达...原创 2019-03-29 08:57:41 · 132 阅读 · 0 评论 -
【Java并发编程的艺术】读书笔记第九章
合理地使用线程池能够带来3个好处 第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。 第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。 第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源, 还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。 线程池的实现原理 线程池判断核心线程池里的线程是否都在执行任务...原创 2019-03-29 09:25:31 · 126 阅读 · 0 评论