Java多线程:Callable,Future,FutureTask
一、Future
- cancel方法用来取消任务,如果取消任务成功则返回true,如果取消任务失败则返回false。参数mayInterruptIfRunning表示是否允许取消正在执行却没有执行完毕的任务,如果设置true,则表示可以取消正在执行过程中的任务。如果任务已经完成,则无论mayInterruptIfRunning为true还是false,此方法肯定返回false,即如果取消已经完成的任务会返回false;如果任务正在执行,若mayInterruptIfRunning设置为true,则返回true,若mayInterruptIfRunning设置为false,则返回false;如果任务还没有执行,则无论mayInterruptIfRunning为true还是false,肯定返回true。
 - isCancelled方法表示任务是否被取消成功,如果在任务正常完成前被取消成功,则返回 true。
 - isDone方法表示任务是否已经完成,若任务完成,则返回true;
 - get()方法用来获取执行结果,这个方法会产生阻塞,会一直等到任务执行完毕才返回执行结果;
 - get(long timeout, TimeUnit unit)用来获取执行结果,如果在指定时间内,还没获取到结果,就直接抛TimeoutException。
 
也就是说Future提供了三种功能:
- 1)判断任务是否完成;
 - 2)能够中断任务;
 - 3)能够获取任务执行结果。
 
二、.FutureTask
三、实际案例
Future<HashMap> future = getDataFromRemote2();
//do something
HashMap data = (HashMap) future.get();
getDataFromRemote2()启动了对远程计算结果的获取,同时自己的线程还在继续处理,知道需要时再获取数据
private Future<HashMap> getDataFromRemote2() {
    return threadpool.submit(new Callable<HashMap>() {
        public HashMap call() throws Exception {
            return getDataFromRemote()
        }
    });
}
Java多线程:Callable,Future,FutureTask的更多相关文章
- JAVA 多线程 Callable 与 FutureTask:有返回值的多线程
		
java多线程中,如果需要有返回值,就需要实现Callable接口. 看例子: 先建立一个Dowork这个类,就是平时某个业务的实现 package com.ming.thread.one; impo ...
 - Java 并发编程——Callable+Future+FutureTask
		
Java 并发编程系列文章 Java 并发基础——线程安全性 Java 并发编程——Callable+Future+FutureTask java 并发编程——Thread 源码重新学习 java并发 ...
 - Java多线程 - Callable和Future
		
已知的创建多线程的方法有继承Tread类和实现Runnable方法.此外Java还提供了Callable接口,Callable接口也提供了一个call()方法来做为线程执行体.但是call()方法与r ...
 - java 并发runable,callable,future,futureTask
		
转载自:http://www.cnblogs.com/dolphin0520/p/3949310.html package future_call; import java.util.concurre ...
 - Java多线程Callable和Future类详解
		
public interface Callable<V> 返回结果并且可能抛出异常的任务.实现者定义了一个不带任何参数的叫做 call 的方法 public in ...
 - Java - 多线程Callable、Executors、Future
		
http://blog.csdn.net/pipisorry/article/details/44341579 Introduction Callable接口代表一段能够调用并返回结果的代码; Fut ...
 - 12 Callable & Future & FutureTask
		
创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需要获取执行结果,就必须通过共享变量或者使用 ...
 - java 多线程 Callable中的futrue模式
		
java实现Callable接口中用到了future模式,所以实现了这个接口就看到了有返回值,那它的基本原理是什么鬼,往下看. 何为future模式? future模式有点类似于商品订单.在网上购物时 ...
 - Java  多线程并发 Future+callable 实例
		
需求:一个业务实现 查询, 因为 要查询十几次, 所以每个平均0.6秒, 之前只有主线程一步步查 ,结果用了10秒,效率十分低下 , 于是改用线程池并发: 以下是代码设计: 1.线程池工具类: pac ...
 
随机推荐
- JavaScript实现弹窗报错
			
JavaScript实现弹窗报错 1.具体错误如下 SCRIPT 5022:cannot call methods on dialog prior to initialization; attempt ...
 - 把连续动态bmp转换为avi
			
把动态bmp24转换为avi BYTE tmp_buf[1024*768*4]; //生成avi void BMPtoAVI(CString szAVIName, CString strBmpDir) ...
 - Day25 前端自学日记——入坑记
			
一 学习契机 今年是走出校门的第一个年头,进入了一家还算不错的公司,领着一份还算不错的薪水,在外人眼中,似乎这样已经不错了,只要我努力好好做,前程一片光明.可事实真是这样吗?两份实习经历都指向我应该从 ...
 - SDK、JDK、JRE、ADB、AVD到底都是啥?
			
SDK:Software Development Kit,软件开发工具包是一些被软件工程师用于为特定的软件包.软件框架.硬件平台.操作系统等创建应用软件的开发工具的集合,一般而言SDK即开发 Wind ...
 - mac下安装ELK
			
本文主要为自己所走弯路而做的补充,对小白(比如我)来讲某些博客讲的还是高深了,特地来此补充说明一些东西. 主要步骤参考http://blog.csdn.net/ywheel1989/article/d ...
 - 【NFS】nfs安装调优
			
nfs [root@flymaster ~]# rpm -qa nfs-utils rpcbindnfs-utils-1.2.3-75.el6.x86_64rpcbind-0.2.0-13.el6_9 ...
 - 【BZOJ1095】捉迷藏(动态点分治)
			
[BZOJ1095]捉迷藏(动态点分治) 题面 BZOJ 题解 动态点分治板子题 假设,不考虑动态点分治 我们来想怎么打暴力: \(O(n)DP\)求树的最长链 一定都会.不想解释了 所以,利用上面的 ...
 - 【BZOJ1857】传送带(三分)
			
[BZOJ1857]传送带(三分) 题面 Description 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P, ...
 - Redis之List
			
一.Redis之List简介 1. List是简单的字符串列表,按照插入顺序排列. 2. 一个列表最多可存储232-1个元素(40多亿). 二.Redis之List命令行操作 Lrange:获取列表指 ...
 - PHP 获取访问来源
			
原文:http://www.upwqy.com/details/16.html $_SERVER['HTTP_REFERER'] 通过这个全局变量可以获取访问的链接是来源于哪里 比如说从博客园 htt ...