Java 中 Future 的 isCancelled 方法是否有必要 [问题点数:20分]

Bbs1
本版专家分:0
结帖率 0%
Bbs4
本版专家分:1893
Bbs1
本版专家分:0
Java多线程Future task的使用
处理批量任务 :本文转载地址 : http://blog.csdn.net/u010963948/article/details/54669708先直接上代码如下:一、需要实现Callable接口(可以使用泛型)[<em>java</em>] view plain copypackage com.innotek.spms.service.finance;    import com.innotek.common.u...
java多线程、FutureTask的用法及两种常用的使用场景
FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者Callable的任务给FutureTask,直接调用其run<em>方法</em>或者放入线程池执行,之后可以在外部通过FutureTask的get<em>方法</em>异步获取执行结果,因此,FutureTask非常适合用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。另外,FutureTask还可以确保即使调用了多次run<em>方法</em>...
使用java ExecutorService线程池,将execute放在while循环和for循环中,执行速度会受影响吗?
菜鸟求解两个问题: 1.ExecutorService 的使用问题。将es.execute放在两种循环中,看打印的情况,while控制台打印卡顿明显,for中打印的挺流畅的。。。是两种循环方式影响执行
Java中的Future模式实战
简介 Future模式指的是专门分配一个可以执行取消操作的线程去处理耗时的任务,且可以返回处理结果。简单来说就是可以看做是一个带有返回值且可以取消的Thread。 如果要了解Future模式最好了解以下的类或接口: Callable:Callable是一个接口,它可以看做是带返回值的Runnable Future:Future也是一个接口,它定义了对Future模式做的线程可以执行的操作。
java异步计算-Future使用
1、异步计算实现过程        从jdk1.5开始我们可以利用Future来跟踪异步计算的结果。在此之前主线程要想获得工作线程(异步计算线程)的结果是比较麻烦的事情,需要我们进行特殊的程序结构设计,比较繁琐而且容易出错。有了Future我们就可以设计出比较优雅的异步计算程序结构模型:根据分而治之的思想,我们可以把异步计算的线程按照职责分为3类:       1. 异步计算的发起线程(控
Java Future接口、Future模式理解
Future接口介绍: 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在<em>java</em>.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。 Future模式可以这样来描述:我有一个任务,提交给了
netty源码分析(四)Netty提供的Future与ChannelFuture优势分析与源码讲解
上一节我们讲到netty启动服务类AbstractBootstrap的doBind的<em>方法</em>: private ChannelFuture doBind(final SocketAddress localAddress) { final ChannelFuture regFuture = initAndRegister(); ...略 } 这里边有一个
Future 模式详解(并发使用)
    我觉得很多讲Future模式的文章并没有深刻理解Future模式,其实Future模式只是生产者-消费者模型的扩展。经典“生产者-消费者”模型中消息的生产者不关心消费者何时处理完该条消息,也不关心处理结果。Future模式则可以让消息的生产者等待直到消息处理结束,如果需要的话还可以取得处理结果   用过Java并发包的朋友或许对Future (interface) 已经比较熟悉了,其...
线程池之Future
线程池任务执行结果 这一节来探讨下线程池中任务执行的结果以及如何阻塞线程、取消任务等等。 1 package info.imxylz.study.concurrency.<em>future</em>; 2  3 public class SleepForResultDemo implements Runnable { 4  5     static boolean result = f
“写更少的代码” 是否真的有必要
下面的两种代码编写风格,你更倾向于哪一种呢? 第1种: public static void happyBirthday(int age) { if ((age == 16) || (age == 21) || ((age > 21) && (((age % 10) == 0) || ((age % 25) == 0)))) {
深入理解JVM(三)------再谈引用与finalize()方法
Java对象的引用 无论是通过引用算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链<em>是否</em>可达,判断对象<em>是否</em>存活都与引用有关。垃圾回收的机制主要是看对象<em>是否</em>有引用指向该对象 在Java中类型可分为两大类:值类型与引用类型。值类型就是基本数据类型(如int ,double 等),而引用类型,是指除了基本的变量类型之外的所有类型(如通过 class 定义的类型)。所有的类型在内存中都会分...
java中的 Future详解(以及ExecutorService中的各种方法
关于这一块一前一直是一个盲点,看了看源码总结一下把。这一块内容和线程池也是息息相关的线程池的顶级接口是Executor接口,里面只有一个未实现<em>方法</em>是void execute(Runnable command);下来是ExecutorService接口,继承自Executor接口,里面多 了很多<em>方法</em>,比较重要的几个<em>方法</em>是 &amp;lt;T&amp;gt; List&amp;lt;Future&amp;lt;T&amp;gt;&amp;gt;...
Future类源码解析翻译
/**  * A Future represents the result of an asynchronous  * computation.  Methods are provided to check if the computation is  * complete, to wait for its completion, and to retrieve the result o
Java进阶之FutureTask的用法及解析
1 FutureTask概念FutureTask一个可取消的异步计算,FutureTask 实现了Future的基本<em>方法</em>,提空 start cancel 操作,可以查询计算<em>是否</em>已经完成,并且可以获取计算的结果。结果只可以在计算完成之后获取,get<em>方法</em>会阻塞当计算没有完成的时候,一旦计算已经完成,那么计算就不能再次启动或是取消。一个FutureTask 可以用来包装一个 Callable 或是一个ru
Java并发(四):Callable和Future、锁对象Lock-完美解决同步方式
Callable和FutureCallable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务的返回值,下面来看一个简单的例子:public class CallableAndFuture {
Java 判断线程池 执行完毕
工作中,遇到很多情况需要使用线程,或者线程池。但往往我们需要dengda
Android并发编程之白话文详解Future,FutureTask和Callable
说到并发编程,就一定是多个线程并发执行任务。那么并发编程的基础是什么呢?没错那就是Thread了。一个Thread可以执行一个Runnable类型的对象。那么Runnable是什么呢?其实Runnable是一个接口,他只定义了一个<em>方法</em>run(),这个run()<em>方法</em>里就是我们要执行的任务,并且是要被Thread调用的。因此,一个Runnable就可以理解为一个要被执行的任务,而Thread就是一个执
多线程并发执行任务,取结果归集。终极总结:Future、FutureTask、CompletionService、CompletableFuture...
目录1.Futrue原理:demo:建议:此种<em>方法</em>可实现基本目标,任务并行且按照提交顺序获取结果。使用很普遍,老少皆宜,就是CPU有消耗,可以使用!2.FutureTask原理:demo:建议:demo1在特定场合例如有十分耗时的业务但有依赖于其他业务不一定非要执行的,可以尝试使用。demo2多线程并发执行并结果归集,这里多套一层FutureTask比较鸡肋(直接返回Future简单明了)不建议使...
FutureTask 深度解析
FutureTask 深度解析
Java异步Future详解
简介 Future主要用于有返回值的异步任务。最核心的类是FutureTask,它是Future接口唯一的实现类。 FutureTask 可以看出FutureTask类实现了Runnable和Future接口。 内部属性有 private volatile int state; private Callable&amp;lt;V&amp;gt; callable; /...
Java实现限定方法执行时间 Future类执行超时处理
最近有个需求, 当调用外部接口长时间没有返回的话, 就执行下一步。 public static void main(String[] args) throws InterruptedException,ExecutionException { final ExecutorService exec = Executors.newFixedThreadPool(1);
Java并发编程:Callable、Future和FutureTask 获取返回值
在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口。   这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。   如果需要获取执行结果,就必须通过共享变量或者使用线程通信的方式来达到效果,这样使用起来就比较麻烦。   而自从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务
漫谈并发编程:Future模型(Java、Clojure、Scala多语言角度分析)
0x00 前言 其实Future模型离我们并不远,如果你接触过Spark、Hadoop这些优秀的开源项目,那么在运行程序的时候关注一下他们的输出日志,一不小心你就会发现Future的身影。 在并发编程领域有很多优秀的设计模式,比如常见的Producer-Consumer模式、Pipeline模式和Future模式,这些模式都有其适用的场景,并且能够高效地解决并发问题。 这篇文章会着重分享和Fut
JAVA 并发编程-返回执行结果(Callable和Future)(九)
启动一个线程不论使用Thread或者Runnable的时候,都是没有返回结果的。也就是说Thread和Runnable的run()<em>方法</em>必须没有返回值。   public void run(){} 解决方案: Callable和Future,一个产生结果,一个拿到结果。 简单的来一个实例demo帮助我们理解:public class CallableAndFuture { /** * @pa
关于定时任务ScheduledFuture get方法无法获取thread 的情况
thread = (ScheduledFuture&amp;lt;BaseThread&amp;gt;) <em>future</em>.get(10, TimeUnit.SECONDS); 因业务需要,需要做定时任务。 在打印日志的时候试图调用其返回的<em>future</em>的get<em>方法</em>获取对应的执行线程。然后总是卡在那一行代码。经过调试,该<em>方法</em>应该只能在任务运行时runtime阶段才能访问到对应的执行线程,非执行阶段无法获取。以此做...
java ThreadPool判断是否所有任务都完成的方法
@Test public void test() { ExecutorService threadPool = Executors.newCachedThreadPool(); Future <em>future</em>1 = threadPool.submit(new Callable() { @Override public String call() throws Exception
Promise模式简介(Future) -Java实现异步
Promise模式简介 Promise模式是一种异步编程模式 。它使得我们可以先开始一个任务的执行,并得到一个用于获取该任务执行结果的凭据对象,而不必等待该任务执行完毕就可以继续执行其他操作。等到我们需要该任务的执行结果时,再调用凭据对象的相关<em>方法</em>来获取。这样就避免了不<em>必要</em>的等待,增加了系统的并发性。这好比我们去小吃店,同时点了鸭血粉丝汤和生煎包。当我们点餐付完款后,我们拿到手的其实只是一张可借
akka学习教程(八) Actor中的Future-询问模式
和<em>java</em>线程中的<em>future</em>挺像的,可以将一个actor的返回结果重定向到另一个actor中进行处理,主actor或者进程无需等待actor的返回结果。
java线程中Callble和Future的使用
Callable是<em>java</em>.util.concurrent包中一个接口,Callable 接口类似于 Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是 Runnable 不会返回结果,并且无法抛出经过检查的异常。此接口中就声明了一个<em>方法</em>call(),这个<em>方法</em>计算结果,如果无法计算结果,则抛出一个异常。Executors 类包含一些从其他普通形式转换成 Callable
Java多线程 - Callable 和 Future实现有返回值的线程
原文地址:http://chenxiaoqiong.com/articles/thread2/ 假设有一个很耗时的返回值需要计算,并且这个返回值不是立刻需要的话,那么就可以使用这个组合,用另一个线程去计算返回值,而当前线程在使用这个返回值之前可以做其它的操作,等到需要这个返回值时,再通过Future得到。 创建 Callable 接口的实现类,并实现 call() <em>方法</em>,该 call() <em>方法</em>
Future和Callable、FutureTask实现,带有返回值的线程请求
通过ExecutorService.submit()<em>方法</em>提交的任务,可以获取任务执行完的返回值。 在实际业务场景中,Future和Callable基本是成对出现的,Callable负责产生结果,Future负责获取结果。 1、Callable接口类似于Runnable,只是Runnable没有返回值。 2、Callable任务除了返回正常结果之外,如果发生异常,该异常也会被返
java多线程Future、FutureTask使用示例,返回异步的结果
1、Future、FutureTask介绍Future是一个接口,该接口用来返回异步的结果。FutureTask是一个类,是Future 的一个实现。2、主要<em>方法</em><em>future</em>.get(); 或者 <em>future</em>.get(10000, TimeUnit.MILLISECONDS);获取多线程异步执行结果,但get<em>方法</em>是一个同步<em>方法</em>,如果未拿到结果或者未超时,主线程则一直等待。<em>future</em>.cancel(
Callable和Future 的用法详解
接着上一篇继续并发包的学习,本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果。 Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结果,并且无法抛出返回结果的异常,而Callable功能更强大一些,被线程执行后,可以返回值,这个返回值可以被Future拿到,也就是说,Future可以拿到异步执行任务
CompletionService解决Future的get方法阻塞缺点
使用CompletionService解决Future的get<em>方法</em>阻塞问题 解决<em>方法</em>: CompletionService 的take()<em>方法</em>获取最先执行完的线程的Future对象。 详情:http://www.ya​yihouse.com/yayishuwu/chapter/1546...
Java Callable、Future的两种使用方式
Java Callable、Future的两种使用方式 Callable+Future public class Test { public static void main(String[] args) { ExecutorService executor = Executors.newCachedThreadPool(); Task task = new
Java中的异步执行Future小结
最近碰到的异步处理的操作比较多,异步就是不等想要的结果返回执行接下来的其他操作,等异步结果返回后直接调用已经注册好的处理<em>方法</em>完成后续操作。异步的思想是非常棒的,相比轮询的方式而言,异步的实现方式无疑是高效并且优雅的。本文介绍了包括Future,AIO和有点类似于单机版的Map-Reduce的fork/join框架。 Guava ListenableFuture 使用JDK提供的线程池E...
Java多线程实战:FutureTask与CountDownLatch的完美结合
前提概要 在知乎上看到一道Java多线程的笔试题,心想我多线程只会Thread和Runable,在写WebFluxTest用过一次CountDownLatch,除此之外还没怎么去看cocurrent包下的类,所以就想试试。 题目 知乎传送门:某大型电商Java面试题:一主多从多线程协作 客户请求下单服务(OrderService),服务端会验证用户的身份(RemotePassportS...
Scala future 回调函数方法
结果输出: [info] Running org.learningconcurrency.ch4.FuturesCallbacks run-main-0: callbacks installed, continuing with other work [success] Total time: 4 s, completed 2016-3-20 9:21:34 > ForkJoinPool-1-w
【小家Java】Future与FutureTask的区别与联系
Future模式简述 传统单线程环境下,调用函数是同步的,必须等待程序返回结果后,才可进行其他处理。 Futrue模式下,调用方式改为异步。 Futrue模式的核心在于:充分利用主函数中的等待时间,利用等待时间处理其他任务,充分利用计算机资源。 所谓异步调用其实就是实现一个可无需等待被调用函数的返回值而让操作继续运行的<em>方法</em>。在 Java 语言中,简单的讲就是另启一个线程来完成调用中的部分计算,...
改进版的线程池(仿java的ScheduledFuture)
需求上一篇写了一个线程池http://blog.csdn.net/ylbs110/article/details/51172428 经过仔细查询<em>java</em>API才发现我前面一个方案并不符合要求:<em>java</em>中的newSingleThreadScheduledExecutor是个单线程池,也就是说一直只有一个线程在跑,新添加的任务会存储起来,线程每次跑完一个任务再获取一个新任务继续跑,没有任务则等待任务。
Java编程思想之并发
Java编程思想之并发
java 方法的执行时间监控 设置超时(Future 接口)
在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现。 Future接口是Java标准API的一部分,在<em>java</em>.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。 Future模式可以这样来描述:我有一个任务,提交给了Future,Future替我完成
多线程、线程池、Future的一些疑惑
今天需要用到多线程的时候,用到了线程池,以及Future class,测试代码如下:ExecutorService pool = Executors.newFixedThreadPool(2); List> list = new ArrayList>(); for(int i = 0; i < 10; i++) { MyFuture
Java中使用Future获取线程异步执行结果的使用
Java中使用Future获取线程异步执行结果的使用,超时放弃的代码策略
Java中Future的使用场景和解析
我们通常都是开启一个新的子线程去执行比较耗时的代码,这使用起来非常简单,只需要将耗时的代码封装在Runnable中的run()<em>方法</em>里面,然后调用thread.start()就行。但是我相信很多人有时候都有这样的需求,就是获取子线程运行的结果,比如客户端远程调用服务(耗时服务),我们有需要得到该调用服务返回的结果,这该怎么办呢?很显然子线程运行的run()<em>方法</em>是没有返回值。这个时候Future的作用...
Java:调用本类方法(this关键词)
public class Person{ private String name; private int age; public Person(String name,int age){ this.name=name; this.age=age; this.print(); //调用本类<em>方法</em> } public void print(){ System.out....
三种Java创建线程的方式(Callable,FutureTask)
Java线程具有并发性和异步性,可以说线程是轻量级别的进程,<em>java</em>中线程和现代操作系统中的进程调度都是采用采用抢占式运行。但线程和进程最大的区别是:一个进程中的多个进程共享这个进程的内存空间和系统资源,但是进程之间是有独立的代码段和数据段。 下面介绍三种Java创建线程的方式: 1.  通过继承Thread类创建线程 2.  通过实现Runnable接口来创建线程
java Future用法和意义
在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果。 所以run的返回值是void类型。 如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使用多线程来计算。 但后者需要前者的结果,就需要用callable接口了。 callable用法和runnable一样,只不过调用的是call<em>方法</em>,该<em>方法</em>有一个泛型返回值类型,你可以
Java并发编程 闭锁:FutureTask、CountDownLatch、Semaphore常见使用方法
一、什么是闭锁 闭锁是一种同步工具,可以延迟线程的进度直到终止状态。可以把它理解为一扇门,当闭锁到达结束状态之前,这扇门一直是关闭的,没有任何线程可以通过。当闭锁到达结束状态时,这扇门会打开并允许所有线程通过,并且闭锁打开后不可再改变状态。 闭锁可以确保某些任务直到其他任务完成后才继续往下执行。 这篇博客只讲述这些闭锁常见用法,如果想深入了解其中原理的话请参考其它博客。 二、FutureT...
使用Future的cancel()方法来取消已经提交给执行者的任务
public class Task implements Callable{ @Override public String call() throws Exception { while (true) { System.out.println("Task: Test\n"); Thread.sleep(1
线程池Executors、Callable与Future的应用
package cn.itcast.heima;import <em>java</em>.util.Random; import <em>java</em>.util.concurrent.Callable; import <em>java</em>.util.concurrent.CompletionService; import <em>java</em>.util.concurrent.ExecutionException; import <em>java</em>.util.co
java自定义任务类定时执行任务示例 callable和future接口使用方法
需要整理一下:Runable  Thread,Callable的异同 http://developer.51cto.com/art/201203/321042.htm Callable 和 Future接口 Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其它线程执行的任务。 Callable和Runnable有几点
java 多线程(一)---创建线程的三种方式Thread,Runnable,Callable与Future
1 前言在<em>java</em>中我们经常会遇到多线程问题,包括线程的互斥,同步,线程通信,线程池等一些问题,也是面试中经常问道的。这里做一个笔记。本篇主要介绍创建线程的三种方式,后续会陆续介绍同步,线程通信等问题2 继承Thread类继承Thread类并复写run()<em>方法</em>,是一种很简单的方式,代码如下:package thread;/** * Created by qiyei2015 on 2017/2/6.
Java实现限定方法执行时间-java 1.5以上的Future类可以执行超时处理
开发场景中有是需要对响应时间较长的接口或者<em>方法</em>进行处理,比如跳过继续执行,或者其它的方式,这个可以使用Future实现: 代码 -// 设置BI返回数据最长时间,如果超过此时间则跳过 Callable call = new Callable() { public String call() throws Exception {
Netty 简单样例分析
Netty 是JBoss旗下的io传输的框架,他利用<em>java</em>里面的nio来实现高效,稳定的io传输。 作为io传输,就会有client和server,下面我们看看用netty怎样写client和server Client: 需要做的事情: 1.配置client启动类   ClientBootstrap bootstrap = new ClientBootstrap(..) 2.根据不同的...
并行执行(Callable和Future)一定比串行执行效率高吗?
在一个程序里顺序调用了两个不相关的<em>方法</em>A和B,A耗时100毫秒,B耗时80毫秒,所以总共耗时180毫秒。 main(){ methodA; methodB; } 因为<em>方法</em>A和B不相关,所以我们可以将程序改造成并行执行,使用Callable和Future配合实现(只讨论需要A和B的返回值的情况)。 main(){ ExecutorService executor = Executo
Java多线程/并发20、Future实现类:FutureTask
FutureTask是<em>future</em>的实现类,它同时实现了两个接口:Runnable和Future,所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。因此我们可以: - 调用FutureTask对象的run()<em>方法</em>执行 - 调用FutureTask对象的get()<em>方法</em>取结果 - 也可以将FutureTask对象作为callable的实现用线程池
多线程之Future和Callable【高性能应用场景java.util.concurrent】
如查一个数据集合,第一页至第一百页,返回总页数的总结集,然后导出。第一次需要limit 0 10000,这样,一个SQL查询出非常慢。但用100个线程,一个线程只查limit0 10 就非常快了,利用多线程的特性,返回多个集合,在合并成总集合。import <em>java</em>.util.ArrayList;import <em>java</em>.util.List;import <em>java</em>.util.concurrent.E
使用多线程优化批量导入的回显功能
最近参与开发的项目有批量导入数据的功能,导入回显的过程中需要做一些校验,以确保导入数据的正确性。如果导入的数据特别多,校验规则也特别多,那么一条一条校验的时间就会很长,影响系统使用。这个时候可以使用多线程来并行校验。这里记录一下,以防忘掉。一般要导入的每一条数据的校验都是相互独立的,那么让几条数据并行校验不会影响其他数据。基于这个思想,使用多线程优化导入。笔者所在项目使用了SSM框架,代码实现是在s
Java并发编程之线程池、Callable和Future使用
<em>java</em>并发编程中线程池、Callable使用说明
Java多线程编程-(17)-多线程异步调用之Future模式
一、线程计数器回顾在《Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier》 这一篇中,我们使用线程计数器的方式实现了在主线程中等待计数的线程执行完之后在执行阻塞等待之后的代码。看段代码回顾一下:public class SummonDragonDemo { private static final int THREAD_COUNT
同步调用,异步回调和 Future 模式
目标:通过与<em>方法</em>的同步调用,异步回调比较,理解 Future 模式 三者的不同: 让我们先来明确一下同步与异步的不同。我们这里所说的同步和异步,仅局限在<em>方法</em>的同步调用和异步回调中。即,同步指的是调用一个<em>方法</em>,调用方要等待该<em>方法</em>所执行的任务完全执行完毕,然后控制权回到调用方;异步指的是调用一个<em>方法</em>,调用方不等该<em>方法</em>执行的任务完毕就返回,当任务执行完毕时会自动执行调用方传入的一块代码。 同步调用 vo...
Netty 学习 - 异步操作中的Future和Promise
本文继续介绍Netty的相关知识,主要讲解异步操作中的Future和Promise 由于Netty中的Future都是异步IO操作,结果是未知的,因此命名为ChannelFuture,表示跟Channel的操作有关 ChannelFuture提供了一系列不同于JDK Future的API,用于获取操作结果,添加事件监听器,取消IO操作,同步等待。 Netty强烈建议直
Promise模式简介(Future) --- Java实现异步
Promise模式简介 Promise模式是一种异步编程模式 。它使得我们可以先开始一个任务的执行,并得到一个用于获取该任务执行结果的凭据对象,而不必等待该任务执行完毕就可以继续执行其他操作。等到我们需要该任务的执行结果时,再调用凭据对象的相关<em>方法</em>来获取。这样就避免了不<em>必要</em>的等待,增加了系统的并发性。这好比我们去小吃店,同时点了鸭血粉丝汤和生煎包。当我们点餐付完款后,我们拿到手的其实只是一张
Java并发之深入Future原理源码分析
JDK内置的Future主要使用到了Callable接口和FutureTask类。Callable是类似于Runnable的接口,实现Callable接口的类和实现Runnable的类都是可被其他线程执行的任务。Callable接口可以看作是Runnable接口的补充,Callbale含有泛型,相比Runnable接口的run()<em>方法</em>,call()<em>方法</em>带有返回值,并且可以抛出异常。 callab...
Java中的 FutureTask的示例与Runnable 区别
Java中存在Runnable、Callable、Future、FutureTask这几个与线程相关的类或者接口,在Java中也是比较重要的几个概念,我们通过下面的简单示例来了解一下它们的作用于区别。 Runnable 其中Runnable应该是我们最熟悉的接口,它只有一个run()函数,用于将耗时操作写在其中,该函数没有返回值。然后使用某个线程去执行该runnable即可实现
Java多线程Future的使用
先直接上代码如下: 一、需要实现Callable接口(可以使用泛型) package com.innotek.spms.service.finance; import com.innotek.common.util.SpringContextUtil; import com.innotek.spms.entity.busi.Collector; import com.innotek.spms
FutureTask的用法及两种常用的使用场景
FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者Callable的任务给FutureTask,直接调用其run<em>方法</em>或者放入线程池执行,之后可以在外部通过FutureTask的get<em>方法</em>异步获取执行结果,因此,FutureTask非常适合用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。另外,FutureTask还可以确保即使调用了多次run<em>方法</em>
线程池使用FutureTask时候需要注意的一点事, 获取线程执行结果
8.4 线程池使用FutureTask时候需要注意的一点事 线程池使用FutureTask的时候如果拒绝策略设置为了 DiscardPolicy和DiscardOldestPolicy并且在被拒绝的任务的Future对象上调用无参get<em>方法</em>那么调用线程会一直被阻塞。 问题复现 下面就通过一个简单的例子来复现问题: public class FutureTest { //(1)线程池单个线程,线
取得子线程的返回值(Future 搭载Callable)
其实大部分的时候子线程结束时不需要返回值,使用 new Thread(Runnable) 或者 多线程搭载Runnable的模式就行 但是如果需要返回值的时候,就很麻烦,要用外部变量控制流程,或者新增接口监听等。 当到了<em>java</em>1.5之后,就可以用Future 搭载 Callable的方式来简单解决! 贴上代码: public class CallableFutureTest {
线程死锁,使用Future捕获死锁超时
经典的死锁例子,在以后的编程中可以将不确定<em>是否</em>死锁的程序加上超时判断。import <em>java</em>.util.concurrent.*;public class DeadLock implements Runnable { public int flag = 1; //静态对象是类的所有对象共享的 private static Object o1 = new Object(
利用Future异步获取多线程的返回结果
Future接口是Java标准API的一部分,在<em>java</em>.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。 有了Future就可以进行三段式的编程了,1.启动多线程任务2.处理其他事3.收集多线程任务结果。从而实现了非阻塞的任务调用。在途中遇到一个问题,那就是虽然能异步获取结果,但是Future的结果需要通过isdone来判断<em>是否</em>有结
Guava ListenableFuture实现异步非阻塞调用
为了保证系统响应迅速,需要寻找一种<em>方法</em>能够使调取接口能够异步执行,而Java正好提供了类似的<em>方法</em>,在<em>java</em>.util.concurrent中包含了Future相关的类,运用其中的一些类可以进行异步计算,以减少主线程的等待时间。比如启动一个main<em>方法</em>,main中又包含了若干个其它任务,在不使用Java <em>future</em>的情况下,main<em>方法</em>中的任务会同步阻塞执行,一个执行完成后,才能去执行另一个;如果
Future方式中断线程实现
<em>java</em> <em>future</em>方式实现线程中断
[Java并发编程实战] Future+callable+FutureTask 闭锁机制(含示例代码)
FutureTask 也可以做闭锁,它是 Future 和 callable 的结合体。所以我们有<em>必要</em>来了解 FutureTask的继承关系。 FutureTask 的继承关系类图 先看 FutureTask 类的继承: public class FutureTask&amp;amp;amp;amp;lt;V&amp;amp;amp;amp;gt; implements RunnableFuture&amp;amp;amp;amp;lt;V&amp;amp;amp;amp;gt; 它继承自 Run
Java线程池及Future、Callable获得线程返回结果【Java线程池系列2】
 Java线程池及Future、Callable获得线程返回结果【Java线程池系列2】 Java多线程编程中,经常使用的Thread的Runnable()虽然被经常使用,但其有一个弊端,就是因为无法直接获取该线程的返回值,因为Runnable内的run<em>方法</em>,被定义为void类型,如果开发者需要在线程中处理耗时操作并获得结果,那么必须自己实现一套结果获取的途径,这其实增加了开发者的代码工作
Spring中@Async用法总结
引言: 在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将完成介绍@Async的用法。
多线程之Callable/Future获取多个任务结果并进行汇总
许多不能立即获得计算结果的延迟计算,都可以使用Callable/Future这种形式。例如数据库查询等。Callable是对任务的一种抽象,通过在Executor中包含封装的Callable任务来执行,将结果封装为Future。Future提供了相应的<em>方法</em>判断<em>是否</em>已经完成,以及获取任务的结果(<em>future</em>.get())等方便进行操作。 Get<em>方法</em>的行为取决于任务的状态(尚未开始、正在运行、已完成)...
java Future用法和意义 - 一句话击破
在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果。  所以run的返回值是void类型。  如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使用多线程来计算。  但后者需要前者的结果,就需要用callable接口了。  callable用法和runnable一样,只不过调用的是call<em>方法</em>,该<em>方法</em>有一个泛型返回值类型,你可以
java Callable和Future并发调用,并且返回结果小例子
线程类: /** * 类名称:CallableTest.<em>java</em> * 类描述: * 作 者:why * 时 间:2016年11月7日 */ public class CallableTest implements Callable { //接收传来的值 private String str; public CallableTest(String str){ supe
Callable和Future结合使用的一个例子
Callable有返回结果,实现Callable的线程被调用时会执行实现的call<em>方法</em>-----》Runnable无返回结果,实现Runnable借口的线程被调用时会调用run<em>方法</em>实现Callable借口的线程被作为submit<em>方法</em>的传入参数,submit<em>方法</em>被线程池(在创建该线程池的时候会指定有多少个线程可以放入线程池)调用会得到一个返回结果Future,此处T的类型来自call<em>方法</em>的返回值,就
Vert.x Future 解决复杂查询
封装了一下数据库操作,可以链式操作 BaseVerticle import io.vertx.core.AbstractVerticle; import io.vertx.core.Future; import io.vertx.core.json.JsonArray; import io.vertx.core.json.JsonObject; import io.vertx.ext.asyn...
Future结合RxJava 实现异步调用
0 概述在实际工作中,时常会遇到一个接口服务会调用很多其他的服务(10几个甚至更多,这些服务之间大多都不是相互依赖的),如果采用串行化调用,那么这个接口的服务rt(response time)就会很高,20*50ms=1000ms(假设该接口服务需要调用20个服务,平均每个服务rt为50ms)。本文主要给出Future结合Rx<em>java</em> 实现异步化调用。1 异步化调用用户信息的异步查询,需要你调用服务
(五) Java多线程详解之Callable和Future阻塞线程同步返回结果
Callable要采用ExecutorSevice的submit<em>方法</em>提交,返回Future对象,通过Future的get()<em>方法</em>,同步拿到线程的返回结果,实例代码如下:public class ThreadExample12 { public static void main(String[] args) { ExecutorService threadPool = Exec
AsyncTask隐藏的陷阱
AsyncTask隐藏的陷阱 分类: android 2013-04-16 16:59 277人阅读 评论(0) 收藏 举报 当AsyncTask被介绍到Android中时,它被贴上“无忧线程”的标签。其目标是让与UI线程交互的后台线程变得更容易。从这一点上讲它是成功的,但并非绝对安全————有很多AsyncTask无法应对的情况。如果不小心处理,不会考虑到Asyn
Java中使用变量时首先一定要判断其有效性
以前在写代码之前,只是想到如何将其完成就可以了,而这是很不科学的。以后当我们在做开发的时候,应该树立的第一个观念就是对输入值进行有效性的判断。在这里提一个for in循环的使用: package com.bluesky.ckx; import <em>java</em>.util.ArrayList; import <em>java</em>.util.List; public class Test { @Su...
使用FutureTask执行并行耗时任务
在实际开发中,一般任务都有串行和并行之分。比如走完A步骤之后才能在走B步骤,这个属于串行。比如登录注册操作,只有先获取验证码,然后在使用验证码登录。又比如为了获取一个商品的价格,我们可以从多个渠道获取,从不同渠道获取商品价格是属于并行任务的,多个渠道之间完全没有任何的关系。这个时候我们一般都要搜集结果。 FutureTask就是非常适合这种情景的。 主要api有get,run,canc...
JAVA并发编程(四)任务的取消与关闭
使用简单标志位保存取消状态 为了保证标志位可靠,标志必须为volatile类型。 使用标志位来取消任务是不及时的,如果中间调用了阻塞<em>方法</em>,有可能永远都无法结束。 每个线程都有一个boolean类型的中断状态,interrupt<em>方法</em>能中断目标线程,而isInterrupted<em>方法</em>能返回目标线程的中断状态,静态的interrupted<em>方法</em>将清除当前线程的中断状态,也是清除中断状态的唯一一个<em>方法</em>。 在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来,这时候就需要在JVM关掉的时候执行一些清理现场的
java多线程之Future模式使用
Future模式简述 传统单线程环境下,调用函数是同步的,必须等待程序返回结果后,才可进行其他处理。 Futrue模式下,调用方式改为异步。 Futrue模式的核心在于:充分利用主函数中的等待时间,利用等待时间处理其他任务,充分利用计算机资源。 主要角色 Main:系统启动,调用Client发出请求 Client:返回Data对象,立即返回FutureData,并开启ClientTh
Java高并发(七)——Future模式
       大家想下,多线程处理提高性能的根本本质在哪?其实就是将串行的处理步骤进行并行的处理,其实总时间是没有缩短的。也就是以前一个人干活需要10个小时,而十个人干同样的活需要1小时,从而缩短处理时间。但是如果干活有先后限制怎么办?例如工作中:测试前必须编码,编码前必须设计,设计前必须需求分析,分析前……如何提高这种情况的性能呢?或者说是如何让这中情况下的线程更加充分利用呢?Future模式—...
Java同步工具类——FutureTask
本文内容来自《Java并发编程实战》FutureTask也可以用作闭锁。(FutureTask实现了Future语义,表示一种抽象的可生成结果的计算。FutureTask表示的计算是通过Callable来实现的,相当于一种可生成结果的Runnable,并且可以处于以下3种状态:等待运行(Waiting to run),正在运行(Running)和运行完成(Completed)。”执行完成”表示计算的
Java并发编程:Callable、Future和FutureTask原理解析
返回结果的任务Callable与FutureExecutor框架使用Runnable作为其基本的任务表示形式。Runnable是一种有很大局限的抽象,它不能返回一个值或抛出一个受检查的异常。Runnable接口:public interface Runnable { public abstract void run(); }由于run()<em>方法</em>返回值为void类型,所以在执行完任务之后无法返回
Java异步执行任务常用方式FutureTask和ExecutorService
1,ExecutorService结合线程池package com.asyn; import <em>java</em>.util.Date; import <em>java</em>.util.concurrent.ExecutorService; import <em>java</em>.util.concurrent.Executors; public class ExecutorServiceTest { private static...
java中Future的应用
Future接口是Java标准API的一部分,在<em>java</em>.util.concurrent包中。Future接口是Java线程Future模式的实现,可以来进行异步计算。有了Future就可以进行三段式的编程了,1.启动多线程任务2.处理其他事3.收集多线程任务结果。从而实现了非阻塞的任务调用。在途中遇到一个问题,那就是虽然能异步获取结果,但是Future的结果需要通过isdone来判断<em>是否</em>有结果,...
Java并发之执行器 —— 线程池ThreadPool
  优势 构建一个新的线程是有一定代价的, 因为涉及与操作系统的交互。如果程序中创建了大量的生命期很短的线程,应该使用线程池 减少并发线程的数目 Executors 执行器( Executors) 类有许多静态工厂<em>方法</em>用来构建线程池 <em>方法</em> 描述 newCachedThreadPool <em>必要</em>时创建新线程;空闲线程会被保留 60 秒 newFixedThreadPool ...
Unix 网络编程 卷1下载
UNIX 网络编程 卷1 带书签 pdf 清晰 UNIX 网络编程 卷1 带书签 pdf 清晰 UNIX 网络编程 卷1 带书签 pdf 清晰 UNIX 网络编程 卷1 带书签 pdf 清晰 UNIX 网络编程 卷1 带书签 pdf 清晰 UNIX 网络编程 卷1 带书签 pdf 清晰 相关下载链接:[url=//download.csdn.net/download/houxiaofan/2152855?utm_source=bbsseo]//download.csdn.net/download/houxiaofan/2152855?utm_source=bbsseo[/url]
IAR Embedded Workbench for ARM 6.50.2 破解补丁下载
仅支持IAR EWARM 6.50.2 破解。 破解原理和方法见:http://blog.csdn.net/chivalrys/article/details/8564568 仅供研究学习! 相关下载链接:[url=//download.csdn.net/download/chivalrys/5051334?utm_source=bbsseo]//download.csdn.net/download/chivalrys/5051334?utm_source=bbsseo[/url]
Spring Restful 可运行完整项目下载
Spring MVC Restful 基础搭建 ,主要包括:采用 GET POST PUT DELETE 进行数据的 CRUD ,以及内容协商机制,通过不同的请求返回不同的数据格式,包括 JSON XML 以及 HTML 相关下载链接:[url=//download.csdn.net/download/wp562846864/8113077?utm_source=bbsseo]//download.csdn.net/download/wp562846864/8113077?utm_source=bbsseo[/url]
文章热词 设计制作学习 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 ee 有必要学习java java有必要学习算法吗
我们是很有底线的