paip.java 多线程参数以及返回值Future FutureTask 的使用.
paip.java 多线程参数以及返回值Future FutureTask 的使用.
在并发编程时,一般使用runnable,然后扔给线程池完事,这种情况下不需要线程的结果。
所以run的返回值是void类型。
作者Attilax 艾龙, EMAIL:1466519819@qq.com
来源:attilax的专栏
地址:http://blog.csdn.net/attilax
如果是一个多线程协作程序,比如菲波拉切数列,1,1,2,3,5,8...使用多线程来计算。
但后者需要前者的结果,就需要用callable接口了。
callable用法和runnable一样,只不过调用的是call方法,该方法有一个泛型返回值类型,你可以任意指定。
线程是属于异步计算模型,所以你不可能直接从别的线程中得到函数返回值。
这时候,Future就出场了。Futrue可以监视目标线程调用call的情况,当你调用Future的get()方法以获得结果时,当前线程就开始阻塞,直接call方法结束返回结果。
FutureTask类是Future 的一个实现,并实现了Runnable,所以可通过Excutor(线程池) 来执行,也可传递给Thread对象执行。如果在主线程中需要执行比较耗时的操作时,但又不想阻塞主线程时,可以把这些作业交给Future对象在后台完成,当主线程将来需要时,就可以通过Future对象获得后台作业的计算结果或者执行状态。
Executor框架利用FutureTask来完成异步任务,并可以用来进行任何潜在的耗时的计算。一般FutureTask多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。
以下是单个FUture...多个能行配合线程池以及list,参考.java Future用法和意义一句话击破_archlinux吧_百度贴吧
// ExecutorService executor = Executors.newSingleThreadExecutor();
//如果不需要特定的结果,则考虑使用下列形式的构造:Future<?> f = new FutureTask<Object>(runnable, null)
FutureTask futureTask =
new FutureTask(new Callable() {//使用Callable接口作为构造参数
public Object call() {
//真正的任务在这里执行,这里的返回值类型为String,可以为任意类型
//ini wordLib need2s
fentsiOr
fentsiCca22=new fentsiOr();
fentsiCca22.iniFentsiWordlibFromdb();//haosi 2s
return fentsiCca22;
}});
// 使用futureTask创建一个线程
Thread Thread1 = new Thread(futureTask);
Thread1.start();
// 测试后台的计算线程是否完成,如果未完成则等待
// if (!futureTask.isDone()) {
System.out.println("--other work");
//need 300 ms about
System.out.println("--start ini renva envent db");
renvaEventC rec=new renvaEventC();
rec.iniTypeKeywordLibFromDB();
System.out.println(" rec.iniTypeKeywordLibFromDB(); ok" );
rec.iniEventKeywordlibFromdb();
//ini wordlib in writeToIndex();
//ini word_stopword not need
//cb3 ini map_Renva4problem
this.inimap4Renva(); //prob renva fenlei map 180ms
// renvaEventC rec = null;
System.out.println("--start ini renva envent db finish");
fentsiOr fentsiOrcb9;
try {
fentsiOrcb9 = (fentsiOr) futureTask.get();
// future.get(5000, TimeUnit.MILLISECONDS); //取得结果,同时设置超时执行时间为5秒。
} catch (Exception e1) {
e1.printStackTrace();
throw new RuntimeException(e1);
}
System.out.println(fentsiOrcb9);
参考:
Future和FutureTask - 每天进步一点点! - ITeye技术网站.htm
java Future 接口介绍 - yangyan19870319的专栏 - 博客频道 - CSDN.NET.htm
java Future用法和意义一句话击破_archlinux吧_百度贴吧.htm
paip.java 多线程参数以及返回值Future FutureTask 的使用.的更多相关文章
- C#秘密武器之多线程——参数与返回值
线程函数要么没有参数,要么只能有一个object参数,而且均没有返回值,这样就大大降低了程序的灵活性,其实我们想要的是能像普通方法一样正常使用参数和返回值!能不能实现这个需求呢?下面就介绍两种方法 一 ...
- java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)
这个数据访问的功能,我在.NET+Mysql .NET+Sqlserver PHP+Mysql上都实现过,并且都发布在了我博客园里面,因为我觉得这个功能实在是太重要,会让你少写很多SQL语句不说,还 ...
- Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API
不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...
- Java加载jar文件并调用jar文件当中有参数和返回值的方法
在工作当中经常遇到反编译后的jar文件,并要传入参数了解其中的某些方法的输出,想到Java里面的反射可以实现加载jar文件并调用其中的方法来达到自己的目的.就写了个Demo代码. 以下的类可以编译生成 ...
- C#多线程函数如何传参数和返回值
详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统. C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...
- 编写Java程序_定义两个方法,实现奇数偶数的判断,并计算和(有参数有返回值方法)
需求说明: 定义两个方法,在控制台输入一个数字,这两个方法可以求出1到该数字之间所有偶数之和.奇数之和,并将对应结果和返回.在main方法中调用该方法,并在控制台打印出结果.(有参数有返回值方法) 运 ...
- Java里的参数类型/返回值类型
参数类型/返回值类型: ##数据类型: ###基本类型: ###引用类型: ####数组 ####类 ####接口 参数类型/返回值类型是类和接口的情况: 1.参数类型是普通类的情况 为什么写成静态, ...
- 060、Java中定义有返回值有参数的方法
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- Java开发学习(十八)----AOP通知获取数据(参数、返回值、异常)
前面的博客我们写AOP仅仅是在原始方法前后追加一些操作,接下来我们要说说AOP中数据相关的内容,我们将从获取参数.获取返回值和获取异常三个方面来研究切入点的相关信息. 前面我们介绍通知类型的时候总共讲 ...
随机推荐
- 解决:HttpClient导致应用出现过多Close_Wait的问题
最近发现一个问题,在服务器上通过netstat命令发现有大量的Close_Wait长时间存在,甚至有时候数量接近1000: 查看服务器参数(etc/sysctl.conf): net.ipv4.tcp ...
- OC学习1
分类: 1 如果在分类中增加一个原有类同名的方法,新方法分覆盖原有类的方法 (哪怕没有导入这个分类) 2 多个分类中有相同的方法,会执行最后编译的方法: 3 分类中不可以添加成员变量: 4 @prop ...
- 打开div层
$('#moneyWin').dialog('open').dialog('center').dialog('setTitle', '用户充值');
- H5-考试判断题
1.所有的元素设置了浮动后都可以设置宽高. 2.行元素都不能设置宽高跟上下边距 3.所有的css样式优先级中“!important”优先级最高(及其不推荐使用) 4.改变元素的transition值, ...
- Java核心知识点学习----多线程并发之线程间的通信,notify,wait
1.需求: 子线程循环10次,主线程循环100次,这样间隔循环50次. 2.实现: package com.amos.concurrent; /** * @ClassName: ThreadSynch ...
- 解决org.openqa.selenium.WebDriverException: Unable to connect to host 127.0.0.1 on port 7055 after 45000 ms org.springframework.beans.BeanInstantiation
解决方法为将selenium-server-standalone-2.37.0.jar升级至selenium-server-standalone-2.41.0.jar即可. 下载地址:http://s ...
- python学习之——爬取网页信息
爬取网页信息 说明:正则表达式有待学习,之后完善此功能 #encoding=utf-8 import urllib import re import os #获取网络数据到指定文件 def getHt ...
- 最新做路径动画必备Simple Waypoint System5.1.1最新做路径动画必备Simple Waypoint System5.1.1
NEW IN 5.0: up to 400% faster thanks to the DOTween engine! UnityEvents, new movement options and mo ...
- POJ2309 -- BST
找找规律,实际上是二分查找的过程,只要找到了mid与输入的n相同的话,直接输出left和right就可以了. 代码如下: #include <iostream> using namespa ...
- 扩展Smack Message
XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性. Smack是一个开源的用 java 写的XMPP(jabber)客户端代码库 因为XMPP是XML,所以进行 ...