Tag Archives | concurrency

戏(细)说Executor框架线程池任务执行全过程(下)

归档下发表于infoq.com 2015年6月的两篇文章。本来是一篇文章,经过Infoq编辑Alice Ding建议,拆分为<上>和<下>两部分。谢谢Alice对文章的细心校对,帮我发下了其中的很多问题。添加下infoq要求的声明:本文为InfoQ中文站特供稿件,首发地址为:http://www.infoq.com/cn/articles/executor-framework-thread-pool-task-execution-part-02 。如需转载,请与InfoQ中文站联系。

内容综述

基于Executor接口中将任务提交和任务执行解耦的设计,ExecutorService和其各种功能强大的实现类提供了非常简便方式来提交任务并获取任务执行结果,封装了任务执行的全部过程。本文尝试通过对j.u.c.下该部分源码的解析以ThreadPoolExecutor为例[......]

阅读全文

Tags: , , , , ,

Comments { 9 }

戏(细)说Executor框架线程池任务执行全过程(上)

归档下发表于infoq.com 2015年6月的两篇文章。本来是一篇文章,经过Infoq编辑Alice Ding建议,拆分为<上>和<下>两部分。谢谢Alice对文章的细心校对,帮我发下了其中的很多问题。添加下infoq要求的声明:本文为InfoQ中文站特供稿件,首发地址为:http://www.infoq.com/cn/articles/executor-framework-thread-pool-task-execution-part-01?。如需转载,请与InfoQ中文站联系。

内容综述

基于Executor接口中将任务提交和任务执行解耦的设计,ExecutorService和其各种功能强大的实现类提供了非常简便方式来提交任务并获取任务执行结果,封装了任务执行的全部过程。本文尝试通过对j.u.c.下该部分源码的解析以ThreadPoolExecutor为例[......]

阅读全文

Tags: , , , ,

Comments { 3 }

源码剖析AQS在几个同步工具类中的使用

1. 前言

AQS(AbstractQueuedSynchronizer)是 java.util.concurrent的基础。J.U.C中宣传的封装良好的好用的同步工具类SemaphoreCountDownLatchReentrantLockReentrantReadWriteLockFutureTask等虽然各自都有不同特征,但是简单看一下源码,每个类内部都包含一个如下的内部类定义:

AQS_hierachy

同时每个类内部都包含有这样一个属性,连属性名都一样!注释已经暗示了,该类的同步机制正是通过这个AQS的子类来完成的。不得不感叹:“每个强大的同步工具类,内心都有一把同样的锁!

几种同步类提供的功能其实都是委托sync来完成。有些是部分功能,有些则是全[......]

阅读全文

Tags: , , ,

Comments { 4 }

理解Executor接口的设计思路

Executor作为J.U.C的比较基础的功能功能,用到过,但理解不深,前阵子用线程池的时候把这部分源码扫了一遍,有些体会,记录下。记录下来感觉很简单,好像连记一下的必要都没有了,但是之前就是不理解。

Doug Lea大师的Executor所有的代码就这么些:

这个接口只定义了一个方法,就是execute传入的Runnable对象。意思也不难理解就是,执行Runnable中定义的内容。如果把传入的这个Runnable的参数理解为一个执行任务Task的描述,可能会更好理解。这个方法的作用就是把提交的这个task给execute起来。

很明显如果一个线程调用到这个方法,则会在这个线程中提交Task。但是Task怎么执行,什么时候执行,以哪种方式执行,是否有返回值,实在当前线程中执行还是在其他线程中执行,都不做要求[......]

阅读全文

Tags: , ,

Comments { 0 }

fork/join计算Fibonacci数测试性能问题

一、说明

Java 并发之 Fork/Join一文中尝试了一个计算Fibonacci数的例子。即根据Fibonacci数的

[box]Fibonacci(n)=Fibonacci(n-1)+Fibonacci(n-2)[/box]

的递归特征,使用Fork/Join框架来对任务进行分解,创建子任务来执行。本来只是想示例一下功能。在写main函数调用的时候又顺手写了个传统递归的执行方式,Fibonacci的递归太典型了。[highlight]想“欣赏”下,在Fork/Join框架下采用并发方式进行执行的优越性。但是结果却和期望大相径庭[/highlight]。

原因待分析,问题先记录下来。

二、代码:

1. 一个RecursiveTask,可以返回每次计算的值。

2. 调用入口main函数,顺便再改类中写了个[......]

阅读全文

Tags: ,

Comments { 0 }