Java中获得线程的返回值
2015-11-26 16:13
441 查看
java5之前是没有返回值的,Java5新增了Callable接口获得线程的返回值,用法如下: package com.ronniewang; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class GetReturnValueFromCallable { private static final int SLEEP_MILLS = 3000; private static final int SECOND_MILLS = 1000; private static int sleepSeconds = SLEEP_MILLS / SECOND_MILLS; ExecutorService executorService = Executors.newCachedThreadPool(); /** * 在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable */ public static void main(String[] args) { new GetReturnValueFromCallable().testCallable(); } private void testCallable() { /** * Callable需要实现的是call()方法,而不是run()方法,返回值的类型有Callable的类型参数指定, * Callable只能由ExecutorService.submit() 执行,正常结束后将返回一个future对象 */ Future<String> future = executorService.submit(new Callable<String>() { public String call() throws Exception { Thread.sleep(SLEEP_MILLS); return "I from callable"; } }); while (true) { /** * 获得future对象之前可以使用isDone()方法检测future是否完成,完成后可以调用get()方法获得future的值, * 如果直接调用get()方法,get()方法将阻塞值线程结束 */ if (future.isDone()) { try { System.out.println(future.get()); break; } catch (InterruptedException e) { <span style="color:#009900;">// ignored</span> } catch (ExecutionException e) { <span style="color:#009900;"> // ignored</span> } } else { try { System.out.println("after " + sleepSeconds-- + " seconds, we will get future"); Thread.sleep(SECOND_MILLS); } catch (InterruptedException e) { <span style="color:#006600;"> // ignored</span> } } } } }
相关文章推荐
- java Timer的使用
- Spring的数据源配置 DBCP、C3P0、BoneCP
- Spring的事务传播属性,数据库的隔离级别
- Spring常用注解,自动扫描装配Bean
- Spring MVC 教程,快速入门,深入分析
- java中float内存存储原理
- 使用JavaMail创建邮件和发送邮件
- Spring注解@Component、@Repository、@Service、@Controller区别
- 在Java的Struts框架中ONGL表达式的基础使用入门
- Java 与无符号那些事儿
- struts2 流程分析
- 详解Java的Struts框架中栈值和OGNL的使用
- spring aop 配置使用说明
- Exception in thread "main" java.lang.NoSuchMethodError: javax.persistence.OneToMany.orphanRemoval()Z
- 菜鸟学Java----Java面向对象
- struts2 原理
- SpringMVC4 配置
- java开发记录
- Java的Struts框架中<results>标签的使用方法
- eclipse出现乱码的情况