java 并发runable,callable,future,futureTask
转载自:http://www.cnblogs.com/dolphin0520/p/3949310.html
package future_call; import java.util.concurrent.Callable; /**
* Created by luozhitao on 2017/8/10.
*/
public class Task implements Callable<Integer> {
// @Override
public Integer call() throws Exception { System.out.println("子线程在进行计算"); Thread.sleep(10000);
System.out.println("子线程睡眠完毕");
int sum=0;
for (int i=0;i<100;i++){ sum+=i; } return sum;
}
}
1.使用Callable+Future
package future_call; import java.util.concurrent.*; /**
* Created by luozhitao on 2017/8/10.
*/
public class Task_test { public static void main(String [] args){ ExecutorService executorService= Executors.newCachedThreadPool();
Task task=new Task();
Future<Integer> future=null;
try{
// executorService future=executorService.submit(task);
System.out.println("线程池关闭之前");
executorService.shutdown();
System.out.println("线程池关闭之后"); }catch (RejectedExecutionException e){System.out.println(e);} try{ Thread.sleep(1000); }catch (InterruptedException e){e.printStackTrace();} System.out.println("主线程在进行计算"); try{ System.out.println(future.get()); }catch (InterruptedException e){e.printStackTrace();} catch (ExecutionException e){e.printStackTrace();} }
}
2.使用Callable+FutureTask
package future_call; import java.util.concurrent.*; /**
* Created by luozhitao on 2017/8/10.
*/
public class future_task1 { public static void main(String [] args){ ExecutorService executorService= Executors.newCachedThreadPool();
Task task=new Task();
FutureTask<Integer> futureTask=new FutureTask<Integer>(task);
try {
/*
executorService.submit(futureTask);
executorService.shutdown();
*/
Thread thread=new Thread(futureTask);
thread.start(); }catch (RejectedExecutionException e){e.printStackTrace();} try {
Thread.sleep(1000);
System.out.println("主线程睡眠完毕");
}catch (InterruptedException e){e.printStackTrace();} try{ System.out.println(futureTask.get()); }catch (InterruptedException e){e.printStackTrace();}catch (ExecutionException e){e.printStackTrace();} } }
如果为了可取消性而使用 Future 但又不提供可用的结果,则可以声明 Future<?> 形式类型、并返回 null 作为底层任务的结果。
/**
* 提交runnable则没有返回值, future没有数据
*/
Future<?> result = mExecutor.submit(new Runnable() { @Override
public void run() {
fibc(20);
}
}); System.out.println("future result from runnable : " + result.get());
java 并发runable,callable,future,futureTask的更多相关文章
- Java 并发编程——Callable+Future+FutureTask
Java 并发编程系列文章 Java 并发基础——线程安全性 Java 并发编程——Callable+Future+FutureTask java 并发编程——Thread 源码重新学习 java并发 ...
- Java多线程:Callable,Future,FutureTask
一.Future Future和Callable基本是成对出现的,Callable负责产生结果,Future负责获取结果. 1.Callable接口类似于Runnable,只是Runnable ...
- Java并发:Callable、Future和FutureTask
Java并发编程:Callable.Future和FutureTask 在前面的文章中我们讲述了创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一 ...
- 【原创】JAVA并发编程——Callable和Future源码初探
JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...
- Java并发编程笔记之FutureTask源码分析
FutureTask可用于异步获取执行结果或取消执行任务的场景.通过传入Runnable或者Callable的任务给FutureTask,直接调用其run方法或者放入线程池执行,之后可以在外部通过Fu ...
- java Runnable、Callable、FutureTask 和线程池
一:Runnable.Callable.FutureTask简介 (1)Runnable:其中的run()方法没有返回值. ①.Runnable对象可以直接扔给Thread创建线程实例,并且创建的线程 ...
- Callable,Future,FutureTask
1.概念定义 2.实现例子 3.总结 1.概念定义 1.Callable Callable是一个接口,效果类似Runnable接口.实现该接口,然后,耗时操作在call()方法中执行.与Run ...
- 12 Callable & Future & FutureTask
创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口. 这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需要获取执行结果,就必须通过共享变量或者使用 ...
- Java并发案例04---Future和 FutureTask
4.Future和 FutureTask 4.1 Future是Callable的返回结果. 它有三个功能 1.判断任务是否完成 2.能够中断任务 3.能够获取任务返回结果 4.2 FutureTas ...
随机推荐
- 14.python模块之subprocess
我们几乎可以在任何操作系统上通过命令行指令与操作系统进行交互,比如Linux平台下的shell.那么我们如何通过Python来完成这些命令行指令的执行呢?另外,我们应该知道的是命令行指令的执行通常有两 ...
- netbeans等宽字体却不支持中文
一直用netbeans,各方面都很满意,就是这字体十分不爽,如用等宽字体却不支持中文,百度了一下,找到了解决办法,贴出来,给需要的朋友. 01.找到自己java字体目录.我的目录是[C:\Progra ...
- tomcat绿色版——运行一闪而过的解决方法
首先配置好jdk的环境变量 %JAVA_HOME%\bin;注意:一定是英文状态下的分号结尾 %TOMCAT%\bin;注意:一定是英文状态下的分号结尾 service.bat install ser ...
- scala学习手记8 - 自适应的默认做法
scala有一些默认做法,会让代码更简洁.更易读写,下面列出了这样几个特性: 1. 支持脚本.scala支持脚本,因此无须将所有的代码都放到类里.如果脚本可以满足需求,就将代码放到一个脚本里,无须再创 ...
- 开发中Dialog多弹窗管理
随着项目的不断迭代,加上产品经理大法(这里加一个弹窗提示,这里加一个引导….)各种弹窗在应用启动时候需要展示, 然而它们出现的时机还有可能重叠.我勒个擦...有没有一种优(tou)雅(lan)的方式来 ...
- MYSQL(python)安装记录
捯饬了很长时间,终于安装成功了,特此记录下! MYSQL历史版本下载,一般为绿色版本 地址:http://downloads.mysql.com/archives/community/ MYSQL安装 ...
- dga2
0e527eaf_5ec5_4623_9fe9_e459583acd72.com0fmgm1cuu7h1279dghgka0ltg.com0ydlanpuh4e2wl9h6udk6.com10uz8k ...
- 【scala】IO
1.读文件 可以使用Scala的Source类及其对象来读取文件. Source 类 需要导入 scala.io.Source 然后调用fromFile()方法来读取文件内容 import scala ...
- 【Wannafly挑战赛9-C】列一列(斐波那契)
链接:https://www.nowcoder.net/acm/contest/71/C 题目描述 小W在计算一个数列{An},其中A1=1,A2=2,An+2=An+1+An.尽管他计算非常精准,但 ...
- Spring 自动装配;方法注入
通过配置defalut—autowire属性,Spring IOC容器可以自动为程序注入Bean:默认是no(不启用自动装配). default—autowire的类型有: byName:通过名称自动 ...