《java.util.concurrent 包源码阅读》01 源码包的结构

准备花点时间阅读一下java.util.concurrent这个包里面的java代码,大致看了一下,这个包我个人觉得大致可以分为五个部分(如有不对之处,还望指正)

 

第一部分 Aomic数据类型

这部分都被放在java.util.concurrent.atomic这个包里面,实现了原子化操作的数据类型,包括 Boolean, Integer, Long, 和Referrence这四种类型以及这四种类型的数组类型。

 

第二部分 锁

这部分都被放在java.util.concurrent.lock这个包里面,实现了并发操作中的几种类型的锁

 

第三部分 java集合框架中的一些数据结构的并发实现

这部分实现的数据结构主要有List, Queue和Map。

 

第四部分 多线程任务执行

这部分大体上涉及到三个概念,

Callable     被执行的任务
Executor  执行任务
Future      异步提交任务的返回数据
 
第五部分 线程管理类
这部分主要是对线程集合的管理的实现,有CyclicBarrierCountDownLatch,Exchanger等一些类
 
以上就是对这个包的结构的粗略分析,接下来会一个部分一个部分地阅读java代码,顺便在这里写些心得和体会与诸位分享。

 

 

 

转载于:https://www.cnblogs.com/wanly3643/archive/2012/12/14/concurrent.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CompletableFuture是Java 8中新增的一个类,它提供了一种异步编程的方式,可以方便地进行异步操作和线程间的通信。其中,runAsync方法是CompletableFuture中的一个静态方法,用于执行一个Runnable任务,并返回一个CompletableFuture对象,其中不含任何返回值。 下面我们来看一下runAsync方法的源码实现: ```java public static CompletableFuture<Void> runAsync(Runnable runnable) { return asyncRunStage(asyncPool, runnable); } private static CompletableFuture<Void> asyncRunStage(Executor e, Runnable f) { if (f == null) throw new NullPointerException(); CompletableFuture<Void> d = new CompletableFuture<Void>(); e.execute(new AsyncRun(d, f)); return d; } static final class AsyncRun implements Runnable { final CompletableFuture<Void> d; final Runnable f; AsyncRun(CompletableFuture<Void> d, Runnable f) { this.d = d; this.f = f; } public void run() { try { f.run(); d.complete(null); } catch (Throwable ex) { d.completeExceptionally(ex); } } } ``` 从代码中可以看出,runAsync方法会调用asyncRunStage方法,将任务和线程池传入异步执行。 在asyncRunStage方法中,首先会判断参数是否为空,如果为空就抛出NullPointerException异常。 接下来,会创建一个CompletableFuture对象d,并将它和任务f封装到AsyncRun对象中。 然后,通过线程池e执行AsyncRun对象,即执行任务f,并将结果存放到CompletableFuture对象d中。 如果任务f执行成功,就调用CompletableFuture对象的complete方法将结果设置为null;如果任务f执行失败,就调用CompletableFuture对象的completeExceptionally方法将异常信息设置到CompletableFuture对象中。 最后,异步执行过程结束,返回CompletableFuture对象d。 总结一下,CompletableFuture的runAsync方法通过将任务封装到AsyncRun对象中,并异步执行任务,最后将结果存放到CompletableFuture对象中,实现了异步编程和线程间通信。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值