Java线程:新特征-有返回值的线程
2015-08-13 11:40
369 查看
Java线程:新特征-有返回值的线程
在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。
现在Java终于有可返回值的任务(也可以叫做线程)了。
可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。
执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。
下面是个很简单的例子:
Java代码
![](http://suo.iteye.com/images/icon_star.png)
import java.util.concurrent.*;
/**
* Java线程:有返回值的线程
*
* @author Administrator 2009-11-5 0:41:50
*/
public class Test {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(2);
//创建两个有返回值的任务
Callable c1 = new MyCallable("A");
Callable c2 = new MyCallable("B");
//执行任务并获取Future对象
Future f1 = pool.submit(c1);
Future f2 = pool.submit(c2);
//从Future对象上获取任务的返回值,并输出到控制台
System.out.println(">>>"+f1.get().toString());
System.out.println(">>>"+f2.get().toString());
//关闭线程池
pool.shutdown();
}
}
class MyCallable implements Callable{
private String oid;
MyCallable(String oid) {
this.oid = oid;
}
@Override
public Object call() throws Exception {
return oid+"任务返回的内容";
}
}
Java代码
![](http://suo.iteye.com/images/icon_star.png)
>>>A任务返回的内容
>>>B任务返回的内容
补充:
(1) 关于Future对象的get()方法调用的问题。
当线程未执行完毕时,调用Future对象的get()方法,是不是有问题啊?其实不然,jdk文档中,get()是这样解释的:如有必要,等待计算完成,然后获取其结果。即get()方法会一直等待线程结束,然后再返回值。
转载自:/article/4121368.html
原文http://suo.iteye.com/blog/1102726
在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写。或者干脆绕过这道坎,走别的路了。
现在Java终于有可返回值的任务(也可以叫做线程)了。
可返回值的任务必须实现Callable接口,类似的,无返回值的任务必须Runnable接口。
执行Callable任务后,可以获取一个Future的对象,在该对象上调用get就可以获取到Callable任务返回的Object了。
下面是个很简单的例子:
Java代码
![](http://suo.iteye.com/images/icon_star.png)
import java.util.concurrent.*;
/**
* Java线程:有返回值的线程
*
* @author Administrator 2009-11-5 0:41:50
*/
public class Test {
public static void main(String[] args) throws ExecutionException, InterruptedException {
//创建一个线程池
ExecutorService pool = Executors.newFixedThreadPool(2);
//创建两个有返回值的任务
Callable c1 = new MyCallable("A");
Callable c2 = new MyCallable("B");
//执行任务并获取Future对象
Future f1 = pool.submit(c1);
Future f2 = pool.submit(c2);
//从Future对象上获取任务的返回值,并输出到控制台
System.out.println(">>>"+f1.get().toString());
System.out.println(">>>"+f2.get().toString());
//关闭线程池
pool.shutdown();
}
}
class MyCallable implements Callable{
private String oid;
MyCallable(String oid) {
this.oid = oid;
}
@Override
public Object call() throws Exception {
return oid+"任务返回的内容";
}
}
Java代码
![](http://suo.iteye.com/images/icon_star.png)
>>>A任务返回的内容
>>>B任务返回的内容
补充:
(1) 关于Future对象的get()方法调用的问题。
当线程未执行完毕时,调用Future对象的get()方法,是不是有问题啊?其实不然,jdk文档中,get()是这样解释的:如有必要,等待计算完成,然后获取其结果。即get()方法会一直等待线程结束,然后再返回值。
转载自:/article/4121368.html
原文http://suo.iteye.com/blog/1102726
相关文章推荐
- java udp socket(双通信)
- Maven Web项目 java.lang.NoClassDefFoundError: org/springframework/core/NestedRuntimeException错误
- 使用struts2中的codebehind插件
- java线程的同步互斥和通讯
- 对象的序列化与反序列化---IO学习笔记(四)
- java基础知识(一)
- Struts2 - 常用的constant总结
- java udp socket通信(仅发送)
- Eclipse种使用Maven
- 利用反射来改变String对象
- SpringMVC表单标签(7)
- eclipse 异常退出 再进入 选择命名空间路径后自动闪退(自动闪退)
- java并发编程--ThreadLocal的用法和分析
- Spring3.1新特性
- SpringMVC基于代码的配置方式(零配置,无web.xml)
- 如何修改eclipse的默认字符集和修改中文乱码
- Java int和integer的区别
- java程序由mysql转到sqlserver时在浮点数处理上遇到的错误
- Java DecimalFormat 用法
- 在spring官网下载jar包、源码、文档