![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发编程读书笔记
novenbersky
这个作者很懒,什么都没留下…
展开
-
同步同容器类和工具类2——阻塞队列和生产者-消费者模式
阻塞队列和生产者-消费者模式 阻塞队列提供可阻塞的put和take方法,以及支持定时的offer和poll方法,如果队列已经满了,那么put方法将阻塞直到有可用空间。 如果队列为空,那么take方法将会阻塞直到有元素可用。队列可以是有界的也可以是无界的。 BlockingQueue简化了生产者-消费者设计的实现过程。它支持任意数量的生产者和消费者。一种常见的shench原创 2013-05-23 07:12:34 · 503 阅读 · 0 评论 -
chapter7 取消与关闭2
1、“毒丸”对象 一种关闭生产者-消费者服务的方式就是使用毒丸对象。毒丸是指一个放在队列上的对象,其含义是:“当得到这个对象时,立即停止”。在FIFO队列中,毒丸对象将保证在关闭之前完成队列中的所有工作。 毒丸模式,也可以扩展为接收到N个毒丸之后才停止。 public class IndexingService { private static final原创 2013-05-31 07:04:43 · 425 阅读 · 0 评论 -
chapter7 取消与关闭1
java没有提供任何一种机制来安全的终止线程。但它提供了中断,这是一种协作机制,能够使一个线程终止另一个线程的当前工作。 这种协作机制是必要的,我们很少希望某个任务、线程或者服务立即停止,因为这种立即停止或使共享的数据结构处于不一致的状态。当需要停止时,应该首先清除当前正在执行的工作,然后再结束。 1、使用volatile来保存取消状态 @ThreadSafe原创 2013-05-29 07:34:56 · 561 阅读 · 0 评论 -
chapter6 任务执行(Task execution)
1、Executor框架 基于executor来构建线程池替代硬编码的线程创建过程。 newFixedThreadPool:固定长度线程池。 newCachedThreadPool:可缓存的线程池,如果线程规模超过处理需求时,那么将回收空闲的线程,而当需求增加时,则可以添加新的线程,线程池的规模没有限制。 newSingleThreadPool:单线程的线程池。原创 2013-05-28 07:26:29 · 437 阅读 · 0 评论 -
同步容器类和工具类4——闭锁
1、闭锁 闭锁可以确保某些活动可以直到其他活动都完成之后才继续执行。 countDownLatch是一种灵活的闭锁实现。可以使一个或者多个线程等待一组事件的发生。 public class TestHarness { public long timeTasks(int nThreads, final Runnable task) thr原创 2013-05-24 07:06:32 · 412 阅读 · 0 评论 -
同步容器类和工具类
1、同步容器类 vector和hashtable是jdk早期出现的两个线程安全的容器类。它们实现线程安全的方式是,将状态封装起来,并对每个公共方法都进行同步。 同步容器类虽然是线程安全的,但是在多个线程进行复合操作时,也会出现不安全的情况。例如同时执行getLast和delLast,可能会抛出索引越界异常,需要手工加锁。 public static object ge原创 2013-05-22 07:25:30 · 520 阅读 · 0 评论 -
同步容器类和工具类3——双端队列与工作密取
java6增加了2种容器类型,Qeque和BlockingQueue,它们分别对Queue和BlockingQueue进行了扩展。Qeque是一个双端队列,实现了在队列头和队列尾的高效插入和移除。具体实现包括ArrayDeque和LinkedBlockingDeque。 正如阻塞队列适用于生产者-消费者模式,双端队列适用于工作密取(work stealing)。在工作密取的设计中,每个原创 2013-05-23 07:15:38 · 1111 阅读 · 0 评论 -
《java并发编程》读书笔记--线程基础
线程的优势: 1、发挥多处理器的强大能力,也可以提高单个处理器的吞吐能力(IO等待时并发处理任务) 2、建模的简单性,复杂任务拆解成简单任务,通过框架解决线程管理的细节。 3、异步事件的简化处理,例如非阻塞IO 4、响应更灵敏的用户界面,事件处理独立线程执行,避免界面失去响应。 线程带来的风险: 1、安全性问题。即线程安全 2、活跃性问题。死锁、饥饿、活锁 3、性能问题。线原创 2013-05-21 06:48:39 · 587 阅读 · 0 评论 -
阻塞队列和生产者-消费者模式
阻塞队列和生产者-消费者模式 阻塞队列提供可阻塞的put和take方法,以及支持定时的offer和poll方法,如果队列已经满了,那么put方法将阻塞直到有可用空间。 如果队列为空,那么take方法将会阻塞直到有元素可用。队列可以是有界的也可以是无界的。 BlockingQueue简化了生产者-消费者设计的实现过程。它支持任意数量的生产者和消费者。一种常见的shench原创 2013-05-22 07:23:34 · 433 阅读 · 0 评论 -
chapter10 避免活跃性危险
1、死锁 JVM在解决死锁方面没有数据库那样强大,无法自动检测和处理死锁。往往只能通过中止并重启才能彻底恢复。 1)顺序死锁 public class LeftRightDeadLock { final Object left = new Object(); final Object right = new Object();原创 2013-06-03 07:21:16 · 426 阅读 · 0 评论