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 的使用.的更多相关文章

  1. C#秘密武器之多线程——参数与返回值

    线程函数要么没有参数,要么只能有一个object参数,而且均没有返回值,这样就大大降低了程序的灵活性,其实我们想要的是能像普通方法一样正常使用参数和返回值!能不能实现这个需求呢?下面就介绍两种方法 一 ...

  2. java Servlet+mysql 调用带有输入参数和返回值的存储过程(原创)

    这个数据访问的功能,我在.NET+Mysql .NET+Sqlserver  PHP+Mysql上都实现过,并且都发布在了我博客园里面,因为我觉得这个功能实在是太重要,会让你少写很多SQL语句不说,还 ...

  3. Java基础学习笔记十二 类、抽象类、接口作为方法参数和返回值以及常用API

    不同修饰符使用细节 常用来修饰类.方法.变量的修饰符 public 权限修饰符,公共访问, 类,方法,成员变量 protected 权限修饰符,受保护访问, 方法,成员变量 默认什么也不写 也是一种权 ...

  4. Java加载jar文件并调用jar文件当中有参数和返回值的方法

    在工作当中经常遇到反编译后的jar文件,并要传入参数了解其中的某些方法的输出,想到Java里面的反射可以实现加载jar文件并调用其中的方法来达到自己的目的.就写了个Demo代码. 以下的类可以编译生成 ...

  5. C#多线程函数如何传参数和返回值

          详见网站:http://WWW.MOVIH.COM就是一个多线程爬虫系统.   C#多线程函数如何传参数和返回值 提起多线程,不得不提起 委托(delegates)这个概念. 我理解的委托 ...

  6. 编写Java程序_定义两个方法,实现奇数偶数的判断,并计算和(有参数有返回值方法)

    需求说明: 定义两个方法,在控制台输入一个数字,这两个方法可以求出1到该数字之间所有偶数之和.奇数之和,并将对应结果和返回.在main方法中调用该方法,并在控制台打印出结果.(有参数有返回值方法) 运 ...

  7. Java里的参数类型/返回值类型

    参数类型/返回值类型: ##数据类型: ###基本类型: ###引用类型: ####数组 ####类 ####接口 参数类型/返回值类型是类和接口的情况: 1.参数类型是普通类的情况 为什么写成静态, ...

  8. 060、Java中定义有返回值有参数的方法

    01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...

  9. Java开发学习(十八)----AOP通知获取数据(参数、返回值、异常)

    前面的博客我们写AOP仅仅是在原始方法前后追加一些操作,接下来我们要说说AOP中数据相关的内容,我们将从获取参数.获取返回值和获取异常三个方面来研究切入点的相关信息. 前面我们介绍通知类型的时候总共讲 ...

随机推荐

  1. 把 TBytes 转换为十六进制字符串

    function BytestoHexString(ABytes: TBytes; len: Integer): AnsiString; begin   SetLength(Result, len*) ...

  2. iOS9的新特性以及适配方案

    新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放.iOS 9加入了更多的新功能,包括更加智能的Siri,新加入的省电模式.iOS 9为开发者提供5000个全新的API. 1. 限制HTT ...

  3. js 验证码 倒计时60秒

    js 验证码 倒计时60秒 <input type="button" id="btn" value="免费获取验证码" /> & ...

  4. Kindeditor为什么提交后获取不到值

    LinkButton不是表单提交方式所以获取不到.如果用button submit提交方式就是form提交方式后台就能获取到值 取得编辑器的HTML内容.KindEditor的可视化操作在新创建的if ...

  5. [golang]反射的用处--代码自动生成

    背景: go语言处理db.json的时候,具体代码的变量定义和db字段.json输出的时候可能不一样. 这个时候,我们需要用tag的方式来进行定义. 例如: type MyStruct struct ...

  6. jQuery.cookie

    了解cookie先了解一下知识点: Navigator (一般是浏览器)对象包含有关浏览器的信息. Navigator userAgent:是一个只读字符串,声明了浏览器用于HTTP请求的用户代理头的 ...

  7. SQl server master

    取一段连续时间,SQl server 2008可用,其他版本暂时没测试.           ),                                      ), )), )      ...

  8. App lifecycle(UWP深入学习一)

    https://msdn.microsoft.com/en-us/library/windows/desktop/br211474.aspx Launching, resuming, and back ...

  9. 使用my exclipse对数据库进行操作(1)

    一.查找 public class class1 { public static void main(String[] args) { // TODO Auto-generated method st ...

  10. alt属性

    也被称为alt text, 是当图片无法加载时显示的替代文本.alt属性对于盲人或视觉损伤的用户理解一幅图片中所描绘的内容非常重要,搜索引擎也会搜索alt属性. 简而言之,每一张图片都应该有一个alt ...