- 博客(12)
- 收藏
- 关注
原创 [Java并发编程实战]协作对象之间存在的死锁问题
百川东到海,何日复西归?少壮不努力,老大徒伤悲。———《汉乐府·长歌行》 河水东流不复返就如时间的流逝不可能停留,告诫我们年少时如果不珍惜时间努力向上,到老只能白白地悔恨自己与悲伤了。上文讲解了锁顺序死锁发生的情况,但是还存在一些死锁的情况,不是顺序锁那么简单可以被发现。因为有可能并不是在同一个方法中显示请求两个锁,而是嵌套另一个方法去获取第二个锁。我们举个例子来说明,下面代...
2018-06-30 11:32:43 2835
原创 [Java并发编程实战]什么是锁顺序死锁
精诚所至,金石为开。———《后汉书·广陵思王荆传》 意思是人的诚心所到,能感动天地,使金石为之开裂。比喻只要专心诚意去做,什么疑难问题都能解决。锁顺序死锁两个线程试图通过不同的顺序获取多个相同的锁。如果请求的顺序不相同,那么会出现循环的锁依赖现象,产生死锁。但是如果保证同时请求锁L和锁M的每一个线程,都是按照从 L 到 M 的顺序,那么就不会发生死锁了。举个例子说明一下,...
2018-06-30 00:07:17 1002
原创 [Java并发编程实战]线程池的饱和策略
有志者,事竟成。———《后汉书·耿弇传》 一个有志气的人,做事情是一定会成功的!通常情况下,线程池会判断线程池的线程是否都处于工作状态。如果没有,则创建一个新的工作线程来执行任务。但是如果有限队列已经满了,则会交给饱和策略来处理这个任务。ThreadPoolExecutor 的饱和策略可以通过调用 setRejectedExecutionHandler 来修改。JDK 提供了...
2018-06-28 00:02:33 1925
原创 [Java并发编程实战] 线程池的使用之饥饿死锁的发生
一屋不扫何以扫天下?———《后汉书·陈蕃传》 这句话的意思是,从一点一滴的小事开始积累,才能做成一番大事业。Executor框架核心之一就是利用线程池,所以接下来这几篇,详细介绍线程池相关的高级选项以及注意事项。任务间隐性耦合的说明虽说 Exectuor 将任务和执行策略解耦,但是实际上言过其实了。假如任务之间存在某种相互依赖关系,其中一个任务必须依赖另外一个的执行,这就...
2018-06-26 23:54:21 1606 1
原创 [Java并发编程实战]管理 Executor 生命周期的几个方法
前文说了 Exectuor 的具体用法,却没有说到如何停止一个任务的执行。所以,本篇文章就来讲解一下 Executor 的生命周期管理。首先,看下这个框架生命周期相关的主要方法。void shutdown();//平缓关闭List<Runnable> shutdownNow(); //强制关闭boolean isShutdown(); //是否关闭boolean is...
2018-06-25 21:40:56 803
原创 [Java并发编程实战] Executor 框架几个常见的实现类介绍(含示例代码)
上一篇文章已经讲了 Executor 的整体框架,其中有提到它的执行的示意流程图。这篇文章就介绍几个常见的实现类的原理和用法,最后通过示例代码,打印 log 来明确它们的执行流程。常见实现类介绍FixedThreadPool 详解SingleThreadExecutorCachedThreadPool代码示例newFixedThreadPool 示例``...
2018-06-22 23:14:05 697
原创 [Java并发编程实战] Executor框架(含思维导图)
Executor 简介Executor 是一个简单的接口,但它却是整个异步任务执行框架的基础,这个框架能支持多种不同类型的任务执行策略。他提供了一种标准的方法将任务的提过过程和执行过程解耦开来,并用 Runnable 来表示任务。Executor 基于生产者-消费者模式,提交任务相当于生产者,执行任务的线程相当于消费者。同时,Executor 的实现还提供了对任务执行的生命周期管理的支持。...
2018-06-11 23:14:03 2066 1
原创 [Java并发编程实战]构建一个高效可复用缓存程序(含代码)
这几天更新了这么多篇文章,其实这些都是并发编程中最基础的知识。现在,我们是时候利用这些知识来写一个小程序了。本篇文章就来介绍如何构建一个用来存储计算结果的高效、可伸缩高速缓存,虽然简单,但也可以说算是对前面知识的一次运用了。高速缓存,无论是在服务器端还是在前端程序中都有不同形式机制的实现。复用缓存里的结果可以大大缩短程序的等待时间,提高吞吐量。说的通俗一点就是利用空间换时间。在本篇文章中,将一...
2018-06-08 23:37:10 935 1
原创 [Java并发编程实战] Future+callable+FutureTask 闭锁机制(含示例代码)
FutureTask 也可以做闭锁,它是 Future 和 callable 的结合体。所以我们有必要来了解 FutureTask的继承关系。FutureTask 的继承关系类图先看 FutureTask 类的继承:public class FutureTask<V> implements RunnableFuture<V> 它继承自 Run
2018-06-06 22:31:28 885 1
原创 [Java并发编程] 用 信号量(Semaphore) 实现一个消息池(含代码)
欲穷千里目,更上一层楼。—唐·王之涣《登颧雀楼》 这句诗的意思是:想看到更远更广阔的景物,你就要再上一层楼。想学到更多更深的知识,你就要比原来更努力。Semaphore,计数信号量,用来控制同时访问某个特定资源的线程数量,需要我们设定它的最大访问数量。 Semaphore 管理着一组虚拟许可,许可的初始数量可以通过构造函数来指定。在执行操作时可以首先获取许可,并在使用后释放许可。...
2018-06-05 22:15:34 476
原创 六月第一跑
今天是儿童节,本大叔本想趁着这节日找几个朋友聚聚,到市区浪一浪,吃个牛肉火锅,或者木屋烧烤,喝上几杯小酒什么的,享受一下美好的广州夜生活。但是摸了摸日渐微胖的肚子,还是把持住了,老老实实呆在家吧。想起来,距离上次跑步有半个多月了,中间几次想坚持锻炼一下,结果是一次又一次的借口,愣是没有跑成。不行,今晚必须出去跑一跑,减减压,出出汗,享受美好月光。抬起脚,迈开跑,一路风景。路过红色公交站...
2018-06-01 23:32:33 248
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人