摘要: 在并发编程中使用生产者和消费者模式能够解决绝大多数并发问题。该模式通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。 为什么要使用生产者和消费者模式 在线程世界里,生产者就是生产数据的线程,消费者就是消费数据的线程。在多线程开发当中,如果生产者处理速度很快,而消费者处理速度很慢,那 阅读全文
posted @ 2017-07-31 15:45 looyee 阅读(145) 评论(0) 推荐(0) 编辑
摘要: 1. 什么是Fork/Join框架 Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。 我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务 阅读全文
posted @ 2017-07-31 15:42 looyee 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 1. 引言 在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现 阅读全文
posted @ 2017-07-31 15:41 looyee 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。 阅读全文
posted @ 2017-07-31 15:41 looyee 阅读(132) 评论(0) 推荐(0) 编辑
摘要: 术语定义 线程不安全的HashMap 因为多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap,如以下代码 效率低下的HashTable容器 HashTable容器使用synchronized来保证线程安全,但在线程竞争激烈 阅读全文
posted @ 2017-07-31 15:39 looyee 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 1. 引言 原子(atom)本意是“不能被进一步分割的最小粒子”,而原子操作(atomic operation)意为"不可被中断的一个或一系列操作" 。在多处理器上实现原子操作就变得有点复杂。本文让我们一起来聊一聊在Intel处理器和Java里是如何实现原子操作的。 2. 术语定义 3. 处理器如何 阅读全文
posted @ 2017-07-31 15:39 looyee 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 1. 引言 合理利用线程池能够带来三个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线 阅读全文
posted @ 2017-07-31 15:38 looyee 阅读(134) 评论(0) 推荐(0) 编辑
摘要: 喜欢 | 作者 方腾飞 发布于 2012年5月24日. 估计阅读时间: 1 分钟 | 智能化运维、Serverless、DevOps......2017年有哪些最新运维技术趋势?CNUTCon即将为你揭秘!32讨论 分享到:微博微信FacebookTwitter有道云笔记邮件分享 稍后阅读 我的阅读 阅读全文
posted @ 2017-07-31 15:37 looyee 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 引言 在多线程并发编程中synchronized和Volatile都扮演着重要的角色,Volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的“可见性”。可见性的意思是当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。 它在某些情况下比synchronize 阅读全文
posted @ 2017-07-31 15:36 looyee 阅读(131) 评论(0) 推荐(0) 编辑