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 ...
随机推荐
- Python数据处理实例
使用python进行数据处理的实例(数据为某公司HR部门关于员工信息的部分摘录,kaggle上面的一次赛题) https://www.kaggle.com/c/kfru-dbm-hr-analytic ...
- poj 3253超时
哈夫曼树超时是因为每次都需要重排,十分浪费时间,即使是快排.
- React Native中加载指示器组件ActivityIndicator使用方法
这里讲一下React Native中的一个组件——ActivityIndicator,这是一个加载指示器,俗称菊花,很常见的,效果如下所示: 可以看到图中有两个加载指示器,一大一小,这是尺寸不是我设置 ...
- Hardware Prefetcher
硬件预取选项,指CPU有硬件预取功能,在CPU处理指令或数据之前,它将这些指令或数据从内存预取到L2缓存中,借此减少内存读取的时间,帮助消除潜在的瓶颈,以此提高系统效能.通常情况下建议设置为Enabl ...
- 比较好的SQL
DECLARE @Data NVARCHAR(30);DECLARE @Data2 NVARCHAR(30);SET @Data = @DataDate;SET @Data = CONVERT(CHA ...
- mac的一些配置
1,基础知识 /etc/bashrc :是针对系统所有用户的全局变量,只有root用户才能修改这两个文件,对一般用户来说是他们是只读的.一般用户要想修改它们,可以在命令前加sudo,意思是以Root身 ...
- [Jquery 插件]活动倒计时,可同步服务器时间,倒计时格式随意设置
活动倒计时,可同步服务器时间,倒计时格式随意设置 使用说明 /* #活动倒计时,可同步服务器时间 startTime:起始时间 endTime:结束时间 format_str:字符模板 speed:倒 ...
- Ubuntu 18.04 编译 ijkplayer
Ubuntu 18.04 编译 ijkplayer 1. 配置安装源 https://mirrors.tuna.tsinghua.edu.cn/help/ubuntu 2. 配置好安装源后,安装一些组 ...
- 2017年浙江工业大学大学生程序设计迎新赛热身赛-J-Forever97与寄信
Forever97与未央是一对笔友,他们经常互相写信.有一天Forever97去邮局寄信,发现邮局的收费方式变成了按字收费,收取的费用为总字数除了其自身以外的最大因子.虽然Forever97是一个有情 ...
- 【sparkStreaming】将DStream保存在MySQL
package SparkDemo import java.sql.{Connection, DriverManager, PreparedStatement} import org.apache.s ...