futuretask专题

多线程(callable+futureTask)去组装数据,并批量入库

商城项目,收货地址会用到4级地址(省,市,县,镇),我们只用到了特定城市的。 但是我想通过京东的接口把全部的数据拿出来。于是就有 ------多线程(callable+futureTask)去组装数据。 ---------------------------     先贴下controller的代码: package com.truelore.xunjia.wssc.test.c

学习分享-FutureTask

前言 今天再改简历的时候回顾了之前实习用到的FutureTask,借此来回顾一下相关知识。 FutureTask 介绍 FutureTask 是 Java 并发包(java.util.concurrent)中的一个类,用于封装异步任务。它实现了 RunnableFuture 接口,而 RunnableFuture 接口继承了 Runnable 和 Future 接口。因此,FutureTas

Callable 与 FutureTask:有返回值的多线程

转自  http://www.cnblogs.com/yjl49/archive/2012/09/26/2704274.html  常用的Thread类在run方法执行完之后是没有返回值的,要实现子线程完成任务后返回值给主线程需要借助第三方转存。Callable接口则提供了一种有返回值的多线程实现方法。下面以一个简单的地主、监工和长工的例子展示这种接口的用法。 长工类:

源码分析-FutureTask

基本原理 首先FutureTask早期使用AQS来实现。目前的版本(java 7)是将所有状态用一个volatile的int来保存。并且使用unsafe的cas来进行修改。当然如果使用一个Atomic类也可以。但是使用unsafe效率更高。 状态介绍 private static final int NEW = 0;private static final int

JAVA 笔记 Callable 与 FutureTask:有返回值的多线程

常用的Thread类在run方法执行完之后是没有返回值的,要实现子线程完成任务后返回值给主线程需要借助第三方转存。Callable接口则提供了一种有返回值的多线程实现方法。下面以一个简单的地主、监工和长工的例子展示这种接口的用法。 长工类: 长工类实现了Callable接口,线程运行完成后返回一个Integer值。  import java.util.concurren

多线程FutureTask的使用方法和使用实例

FutureTask是一种可以取消的异步的计算任务。它的计算是通过Callable实现的,它等价于可以携带结果的Runnable,并且有三个状态:等待、运行和完成。完成包括所有计算以任意的方式结束,包括正常结束、取消和异常。 Future有个get方法而获取结果只有在计算完成时获取,否则会一直阻塞直到任务转入完成状态,然后会返回结果或者抛出异常。 FutureTask有下面几个重

Java 8 Future、FutureTask、CompletableFuture 异步任务

Future 执行异步任务 public class AnswerApp {public static void main(String[] args) throws Exception {ExecutorService executorService = Executors.newCachedThreadPool();Future<Integer> future = executorServi

Runnable,Callable,Future,RunnableFuture,FutureTask,ExecutorService的关系

关系 Executor就是Runnable和Callable的调度容器,Future就是对于具体的调度任务的执行结果进行查看,最为关键的是Future可以检查对应的任务是否已经完成,也可以阻塞在get方法上一直等待任务返回结果。Runnable和Callable的差别就是Runnable是没有结果可以返回的,就算是通过Future也看不到任务调度的结果的。  FutureTask则是一个R

使用Callable和FutureTask使用多线程

使用Callable接口封装任务可以获得任务执行后的结果。它的接口定义比较简单,里面有一个call()方法,和Runnable接口里面的run()方法基本一样,可以看到,Callable接口是在util.concurrent多线程包下的类,它的返回值是一个泛型。 package java.util.concurrent;@FunctionalInterfacepublic interface

Callable and FutureTask

Callable 由关系图可知,Callable和Runnable一样,也是一个函数式接口,可以使用Lambda表达式 与之不同的是,其内部的call()方法可以抛出异常且能return一个返回值 Callable<Object> callable = new Callable() {@Overridepublic Object call() throws Exception {Syst

Java并发——深入理解Executor框架FutureTask类

一、什么是Future和FutureTask 一直以来都对FutureTask这个“Future”不理解,为什么叫做“未来的任务呢”?这个“Future”体现在哪里呢?现在终于明白,FutureTask的Future就源自于它的异步工作机制,如果我们在主线程中直接写一个函数来执行任务,这是同步的任务,也就是说必须要等这个函数返回以后我们才能继续做接下的事情,但是如果这个函数返回的结果对接下来的任

java并发编程实战-CyclicBarrier和FutureTask使用

import java.util.concurrent.Callable;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.FutureTask;public class FutureTest {public static void main(String[] args) {new FutureTest(

SocketInputStream.socketRead0引起线程池提交任务后,futureTask.get超时

文章目录 1. 现象2. 结论3. 相关代码4. 查看堆栈:5. 查看submitCall5.1 ThreadPoolExecutor#execute最终调用了 RunnableFuture#run方法5.2 从代码层面判断 futureTask.get超时只影响了业务线程(调用futureTask.get的线程),不影响工作线程。5.3 future.get5.3.1 测试future.g

FutureTask源码解读

1. 背景与简介 Future是Java执行异步任务时的常用接口。我们通常会往ExecutorService中提交一个Callable/Runnable并得到一个Future对象,Future对象表示异步计算的结果,支持获取结果,取消计算等操作。在Java提供的Executor框架中,Future的默认实现为java.util.concurrent.FutureTask。本文针对FutureTa

Java并发编程与技术内幕:Callable、Future、FutureTask、CompletionService

在上一文章中,笔者介绍了线程池及其内部的原理。今天主要讲的也是和线程相关的内容。一般情况下,使用Runnable接口、Thread实现的线程我们都是无法返回结果的。但是如果对一些场合需要线程返回的结果。就要使用用Callable、Future、FutureTask、CompletionService这几个类。Callable只能在ExecutorService的线程池中跑,但有返

Java并发编程之Future和FutureTask

搞过Java或者客户端Android开发的都知道,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。不过,这2种方式都有一个缺陷,就是在执行完任务之后无法获取执行结果。 如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这就涉及到线程切换和线程通信等问题,就比较的麻烦。 不过,好在Java 从1.5版本开始,就提供了Callable和F

JAVA多线程之FutureTask源码解读

使用过Java线程池的应该都知道,在java.util.concurrent有个ExecutorService的线程池接口,通过这个接口先线程池提交任务,获取任务结果,关闭线程池等等操作。而关于任务执行结果的获取,就不得不提FutureTask这个类。本文从源码的角度分析,线程池是如何通过FutureTask执行多线程任务,又是如何获取多线程执行结果的。 使用多线程,我们多数是使用Executo

FutureTask中的outcome字段是如何保证可见性的?

最近在阅读FutureTask的源码是发现了一个问题那就是源码中封装结果的字段并没有使用volatile修饰,源码如下: public class FutureTask<V> implements RunnableFuture<V> {/*** 状态变化路径* Possible state transitions:* NEW -> COMPLETING -> NORMAL* NEW -> COM

(原创)Callable、FutureTask中阻塞超时返回的坑点

直接上代码 import java.util.concurrent.Callable;public class MyCallable implements Callable<String> {private long waitTime;public MyCallable(int timeInMillis){this.waitTime=timeInMillis;}@Overrid

Callable、Future和FutureTask原理解析

返回结果的任务Callable与Future Executor框架使用Runnable作为其基本的任务表示形式。Runnable是一种有很大局限的抽象,它不能返回一个值或抛出一个受检查的异常。Runnable接口: public interface Runnable {public abstract void run();}123 由于run()方法返回值为void类型,所以在执行完任务之

**FutureTask应用源码分析**(二)

1.3.3 FutureTask的set&setException方法 任务执行完毕后,修改任务的状态以及封装任务的结果 // 没有异常的时候,正常返回结果protected void set(V v) {// 因为任务执行完毕,需要将任务的状态从NEW,修改为COMPLETINGif (UNSAFE.compareAndSwapInt(this, stateOffset, NEW, C

**FutureTask应用源码分析**(一)

1.1 FutureTask介绍 FutureTask是一个可以取消异步任务的类。FutureTask对Future做的一个基本实现。可以调用方法区开始和取消一个任务。 一般是配合Callable去使用。 异步任务启动之后,可以获取一个绑定当前异步任务的FutureTask。 可以基于FutureTask的方法去取消任务,查看任务是否结果,以及获取任务的返回结果。 FutureTask内部的整体

Runnable, Callable, Future, Task, FutureTask总结

​​​​​​ 对象 用法 Runnable 没返回值 Callable 有返回值Task extends Runnable只有俩方法,run和cancel,都没返回值。 Future Executor是Runnable和Callable的调度容器(需和Runnable和Callable配套使用)Future就是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否

看图学源码之FutureTask

RunnableFuture 源码学习: 成员变量 任务的运行状态的转化 package java.util.concurrent;import java.util.concurrent.locks.LockSupport;/**可取消的异步计算。该类提供了Future的基本实现,包括启动和取消计算的方法,查询计算是否完成以及获取计算结果的方法。只有在计算完成后才能获取结果;如

Java-FutureTask

从Java SE 5.0开始引入了Callable和Future,通过它们构建的线程,在任务执行完成后就可以获取执行结果. FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者Callable的任务给FutureTask,直接调用其run方法或者放入线程池执行,之后可以在外部通过FutureTask的get方法异步获取执行结果,因此,FutureTask非

Java 并发编程(七)-异步编程-FutureTask

目录 一、异步编程 1、FutureTask应用&源码分析 1.1、FutureTask应用 1.2、FutureTask源码分析 1.2.1、run方法 1.2.2、set&setException方法 1.2.3、cancel方法 1.2.4、get方法 1.2.5、finishCompletion方法 一、异步编程 1、FutureTask应用&源码分析