Runnable、Callable、Future和FutureTask之一:获取线程的返回值
摘要:《Thread之四:java线程返回结果的方法》 《Runnable、Callable、Future和FutureTask之一:获取线程的返回值》 《CompletionService之一:获得线程(线程池的)处理结果》 Java从发布的第一个版本开始就可以很方便地编写多线程的应用程序,并在设计中引
阅读全文
posted @
2015-05-08 23:20
duanxz
阅读(1897)
推荐(0)
Runnable、Callable、Future和FutureTask之二:源码解析
摘要:一、Callable与Future类图 1、类图 许多任务实际上都是存在延迟的计算,对于这些任务,Callable是一种更好的抽象:它会返回一个值,并可能抛出一个异常。Callable接口: V call() throws Exception; 可以看到,这是一个泛型接口,call()函数返回的类型
阅读全文
posted @
2015-05-08 23:11
duanxz
阅读(566)
推荐(0)
mina2中的线程池
摘要:一、Mina中的线程池模型 前面介绍了Mina总体的层次结构,那么在Mina里面是怎么使用Java NIO和进行线程调度的呢?这是提高IO处理性能的关键所在。Mina的线程调度原理主要如下图所示: Acceptor与Connector线程 在服务器端,bind一个端口后,会创建一个Acceptor线
阅读全文
posted @
2014-06-16 19:30
duanxz
阅读(3140)
推荐(0)
CompletableFuture详解
摘要:背景 在JDK1.5已经提供了Future和Callable的实现,可以用于阻塞式获取结果,如果想要异步获取结果,通常都会以轮询的方式去获取结果,如下: //定义一个异步任务 Future<String> future = executor.submit(()->{ Thread.sleep(200
阅读全文
posted @
2014-03-26 14:43
duanxz
阅读(4215)
推荐(0)
JDK线程池源码之二:线程池相关类介绍
摘要:概要-线程池类图 线程池的类图如下: 1. Executor 它是"执行者"接口,它是来执行任务的。准确的说,Executor提供了execute()接口来执行已提交的 Runnable 任务的对象。Executor存在的目的是提供一种将"任务提交"与"任务如何运行"分离开来的机制。它只包含一个函数
阅读全文
posted @
2013-12-06 13:37
duanxz
阅读(1138)
推荐(0)
JDK线程池源码之三:ThreadPoolExecutor的成员变量介绍
摘要:概要 线程池的实现类是ThreadPoolExecutor类。本章,我们通过分析ThreadPoolExecutor类,来了解线程池的原理。 ThreadPoolExecutor数据结构 ThreadPoolExecutor的数据结构如下图所示: 各个数据在ThreadPoolExecutor.ja
阅读全文
posted @
2013-12-05 09:49
duanxz
阅读(1216)
推荐(0)
JDK线程池源码之五:ThreadFactory、提交任务、关闭线程池
摘要:(一) ThreadFactory 线程池中的ThreadFactory是一个线程工厂,线程池创建线程都是通过线程工厂对象(threadFactory)来完成的。 类图如下: 上面所说的threadFactory对象,是通过 Executors.defaultThreadFactory()返回的。E
阅读全文
posted @
2013-12-04 21:01
duanxz
阅读(3264)
推荐(0)
JDK线程池原理之六: 线程池状态介绍
摘要:《Thread之一:线程生命周期及五种状态》 《juc线程池原理(四): 线程池状态介绍》 线程有5种状态:新建状态,就绪状态,运行状态,阻塞状态,死亡状态。线程池也有5种状态;然而,线程池不同于线程,线程池的5种状态是:Running, SHUTDOWN, STOP, TIDYING,TERMIN
阅读全文
posted @
2013-11-03 21:32
duanxz
阅读(1038)
推荐(0)
JDK线程池原理之四:拒绝策略示例及实现源码
摘要:一、拒绝策略介绍 二、拒绝策略对比和示例 三、拒绝策略怎么实现的? 3.1、线程池中的拒绝策略用的是策略模式 3.2、 四种拒绝策略的实现,ThreadPoolExecutor的静态内部类 3.2.1、DiscardPolicy 3.2.2、DiscardOldestPolicy 3.2.3、Abo
阅读全文
posted @
2013-11-03 21:17
duanxz
阅读(1092)
推荐(1)
JDK线程池源码之七:jdk线程池中的设计模式
摘要:一、jdk中默认线程池中的代理模式 代理模式 单例类线程池只有一个线程,无边界队列,适合cpu密集的运算。jdk中创建线程池是通过Executors类中提供的静态的方法来创建的,其中的单例类线程池的方法如下: public static ExecutorService newSingleThread
阅读全文
posted @
2013-10-31 20:35
duanxz
阅读(2613)
推荐(0)
JDK线程池源码之八:三种阻塞队列
摘要:一、3种类型的BlockingQueue1.1 无界队列1.2 有界队列1.3 同步移交 一、3种类型的BlockingQueue 1.1 无界队列 队列大小无限制,常用的为无界的LinkedBlockingQueue(最大长度是Integer.Max_Value,相当于无界),使用该队列做为阻塞队
阅读全文
posted @
2013-10-21 12:32
duanxz
阅读(851)
推荐(0)
用 ConTest 进行多线程单元测试 - 为什么并行测试很困难以及如何使用 ConTest 辅助测试
摘要:众所周知并行程序设计易于产生 bug。更为严重的是,往往在开发过程的晚期当这些并行 bug 引起严重的损害时才能发现它们并且难于调试它们。即使彻底地对它们进行了调试,常规的单元测试实践也很可能遗漏并行 bug。在本文中,并行专家 Shmuel Ur 和 Yarden Nir-Buchbinder 解释了为什么并行 bug 如此难于捕获并且介绍了 IBM Research 的一种新的解决方案。并行程序易于产生 bug 不是什么秘密。编写这种程序是一种挑战,并且在编程过程中悄悄产生的 bug 不容易被发现。许多并行 bug 只有在系统测试、功能测试时才能被发现或由用户发现。到那时修复它们需要高昂的
阅读全文
posted @
2013-01-20 15:53
duanxz
阅读(521)
推荐(0)
Timer与TimerTask之二:timer使用缺陷及用ScheduledThreadPoolExecutor解决
摘要:1.缺陷一:Timer由于内部只要一个线程,管理多个任务的时候,一个任务延时,后面的任务就会跟着延时。用下面的例子说明: 结果: 从上面的代码看出,第一个任务1s后执行,第二个任务3s后执行。实际上task2是在4s后才执行的,因为Timer内部是一个线程,而task1所需的时间超过了两个任务的间隔
阅读全文
posted @
2012-11-14 11:34
duanxz
阅读(489)
推荐(0)