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. Python-dict与set

    dict(字典):用空间换取时间,占据空间大,但查询速度快,键值对(key:value),key唯一 d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} 由于一个k ...

  2. Linux C _exit函数与exit函数的联系与区别

    一.联系 1.功能上,_exit和exit函数都是让进程正常退出,即关闭进程所打开的文件描述符,释放已占用内存和其他资源. 二.区别 1._exit函数在头文件unistd.h中声明,而exit在头文 ...

  3. Java 基础知识总结 (三、运算符)

    三.Operators 运算符 Assignment Operators(赋值运算符) =   +=   -=   %=   *=   /=    <<=     >>=    ...

  4. SAP 打开账期

    1.先OB52修改账期: 如下界面开得公司9000下面 7.8月份的账期 2.mmpv 关闭上两个账期 3.mmrv 查看现在账期情况

  5. delphi日期格式化免操作系统依赖单元

    delphi免操作系统依赖单元 经常在windows里面,我们需要yyyy-mm-dd格式日期,可是用户却没有设置成这个 格式,而用程序去修改用户的日期格式设置,是不明智的,将影响其他程序的运行. 本 ...

  6. sed初学

    1.连接多个sed命令,使用;号 2.批量修改文本中匹配到相应字符串的行 例如,将文本中log_server_port = "12345" 的12345修改成变量中存储的值 sed ...

  7. mybatis 打印sql 语句

    拦截器 package com.cares.asis.mybatis.interceptor; import java.text.DateFormat; import java.util.Date; ...

  8. cocos2d-x 之 CCArray 的遍历(3)

    cocos2d-x中CCArray的遍历,需要几个宏.现代C++程序设计建议尽量不要使用宏,所以数组的遍历也可以自己写. 但cocos2d-x官方已经提供了几个方便数组遍历的几个宏,用好了,能方便许多 ...

  9. struts的DevMode模式

    在实际应用开发或者是产品部署的时候,对应着两种模式:开发模式(devMode):此时 DevMode=ture: 产品模式(proMode):此时  DevMode=false: 在一些服务器或者框架 ...

  10. 关于GP的理解

    连续式中,CMMI有5个GG:阶段式只有3个.多出来的2个GG,一个对应的是阶段4的量化,一个是阶段5的持续优化,确保了阶段式和连续式在范围上的一致性. GG就是讲各个过程中的共有元素抽取出来,形成的 ...