Future源码一观-JUC系列】的更多相关文章

背景介绍 在程序中,主线程启动一个子线程进行异步计算,主线程是不阻塞继续执行的,这点看起来是非常自然的,都已经选择启动子线程去异步执行了,主线程如果是阻塞的话,那还不如主线程自己去执行不就好了.那会不会有一种场景,异步线程执行的结果主线程是需要使用的,或者说主线程先做一些工作,然后需要确认子线程执行情况来进行后续的操作.那么这里就需要子线程异步执行完任务能把结果告诉主线程,并且主线程还能访问到子线程执行任务的状态,比如是否执行完成或正在执行中. Future就是上面概念的抽象,按照源码中的注释,…
本文已在公众号上发布,感谢关注,期待和你交流. AQS源码二探-JUC系列 共享模式 doAcquireShared 这个方法是共享模式下获取资源失败,执行入队和等待操作,等待的线程在被唤醒后也在这个方法中自旋执行,直到拿到资源. /** * Acquires in shared uninterruptible mode. * @param arg the acquire argument */ private void doAcquireShared(int arg) { // 新节点入队,S…
AQS源码三视-JUC系列 前两篇文章介绍了AQS的核心同步机制,使用CHL同步队列实现线程等待和唤醒,一个int值记录资源量.为上层各式各样的同步器实现画好了模版,像已经介绍到的ReentrantLock,Semaphroe,CountDownLatch都是在模版基础上实现的.花里胡哨,万变不离其宗. 以下是第三部分的内容,尝试写完Condition部分,基本结束AQS源码的学习,不过还是围绕着一个队列(条件队列)来进行的. Tips 在第一篇文章中介绍Node类的nextWaiter字段的时…
AQS源码一窥 考虑到AQS的代码量较大,涉及信息量也较多,计划是先使用较常用的ReentrantLock使用代码对AQS源码进行一个分析,一窥内部实现,然后再全面分析完AQS,最后把以它为基础的同步器都解析一遍. 暂且可以理解AQS的核心是两部分组成: volatile修饰的int字段state,表示同步器状态 FIFO同步队列,队列是由Node组成 节点模式 Node定义中包含的字段,意味着节点拥有模式的属性. 独占模式(EXCLUSIVE) 当一个线程获取后,其他线程尝试获取都会失败 共享…
前提 很早之前就打算看一次JUC线程池ThreadPoolExecutor的源码实现,由于近段时间比较忙,一直没有时间整理出源码分析的文章.之前在分析扩展线程池实现可回调的Future时候曾经提到并发大师Doug Lea在设计线程池ThreadPoolExecutor的提交任务的顶层接口Executor只有一个无状态的执行方法: public interface Executor { void execute(Runnable command); } 而ExecutorService提供了很多扩…
JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的. thread和runnable不讨论了. 太多地方可以找到他们的探究了 重点看callable和future, 先上一段代码: package com.future.chenjun.test; import java.util.concurrent.Callab…
JDK future框架,提供了一种异步编程模式,基于线程池的.将任务runnable/callable提交到线程池executor,返回一个Future对象.通过future.get()获取执行结果,这里提交到线程池,后面的操作不会阻塞.future.get()获取结果会阻塞,其实也是用多线线程执行任务. future.get()这里会阻塞,google的guava提供了一个calllback解决办法,这也是我准备看的 下面是一个future的demo import java.util.con…
本文地址: https://juejin.im/post/5df771ee6fb9a0161d743069 说在前面 本文的 Netty源码使用的是 4.1.31.Final 版本,不同版本会有一些差异. JDK Future 在说JDK的异步Future之前,先简单介绍一下JDK自带的Future机制. 首先先上一段代码 public class JDKFuture { static ExecutorService executors = new ThreadPoolExecutor(1, 1…
CacheFactoryProvider 简介 源码里是这么描述的: Factory that constructs {@link $cacheFactory.Cache Cache} objects and gives access to them. 意思就是通过cacheFactory可以构造一个Cache对象来给予访问和执行权限. 这个Cache对象官方文档是这么说的: A cache object used to store and retrieve data, primarily us…
QProvider 简介 源码里是这么描述的: A service that helps you run functions asynchronously, and use their return values (or exceptions) when they are done processing. 大概意思是帮助你异步执行方法,且当他们执行完后可以使用他们的返回值. This is an implementation of promises/deferred objects inspir…