快速业务通道

深入浅出多线程(3)-Future异步模式以及在JDK1.5Concurrent包中的实现 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
lable的机制。我们只要实现 Callable接口中的Call方法,Call方法是可以返回任意类型的结果的。如下:

package vincent.blogjava.net; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; public class ConcurrentImpl { public static void main(String[] args) throws InterruptedException, Exception { FutureTask fr = new FutureTask(new Returnresult()); new Thread(fr).start(); //main线程无需等待,不会被阻塞。 //模仿 干自己的活 2s。 Thread.sleep(2000); // 估计算完了吧 取取试试。 System.out.println("过来2s了,看看有结果吗?"); if(!fr.isDone()){System.out.println("还没有完成呢! 继续干自己活 吧!");} //模仿 干自己的活 4s。 Thread.sleep(4000); System.out.println("过来4s了,看看有结果吗?"); if(fr.isDone()){ System.out.println("完成了!"); System.out.println("Result:"+fr.get()); } } } class Returnresult implements Callable{ @Override public Object call() throws Exception { //模仿大量耗时计算后(5s)返回结果。 System.out.println("GenerateResultThread开始进行计算了! "); Thread.sleep(11000); return "ResultByGenerateResultThread"; } }

Returnresult 实现了Callable接口,在Call方法中实现业务逻 辑,并返回结果。在Main方法里面,初始化FutureTask 并将该Task作为 Runnable加入Thread后,启动线程。得到跟刚才相同的效果。

注意: 通过JDK标准的Future后,没有必要增加额外的Object来只有Result ,更加简单明了,同时FutureTask还提供了Cancel的功能,我们持有FutureTask 引用后可以Cancel该线程。通过get()取值是,如果结果还没有返回,将会阻塞 Main线程。

其实JDK 实现Future模式的秘密就在FutureTask类里:

FutureTask是实现了Future 和Runnable,对了就是Runnbale接口,我们就可 以把它构造到Thread里,启动执行了。

看看,当 new Thread(new FutureTask(new Callable())).start 时:

深入浅出多线程(3)-Future异步模式以及在JDK1.5Concurrent包中的实现(4)

时间:2011-09-07 BlogJava vincent

看图:

深入浅出多线程(3)-Future异步模式以及在JDK1.5Concurrent包中的实现 - 编程入门网G

get 方法取result值,FutureTask 提供Timeout 功能,如果超时,抛出异常 。

深入浅出多线程(3)-Future异步模式以及在JDK1.5Concurrent包中的实现 - 编程入门网

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号