从任务中产生返回值
Runnable是执行工作的独立任务,不返回任何值,如果希望任务结束后能够返回一个值,应该实现Callable接口,并且通过ExecutorService.submit()调用,并返回一个Future<T>对象
package com.woxiaoe.study.thread;
import java.util.concurrent.Callable;
/**
* 计数类2可以返回值
* @author 小e
*
* 2010-4-19 下午09:55:12
*/
public class Counter2 implements Callable<String> {
private int countNum;
private static int taskCount = 0;//线程id
private final int taskId = taskCount++;
public Counter2(int countNum) {
this.countNum = countNum;
}
public String show(){
return "Id[" + taskId + "] countNum:" + countNum + " ";
}
@Override
public String call() throws Exception {
String result = null;
while(countNum-- > 0){
result = show();
Thread.yield();
}
return result;
}
}
测试代码:
public void testCounter2(){
ExecutorService exec = Executors.newCachedThreadPool();
List<Future<String>> results = new ArrayList<Future<String>>();
for(int i = 0; i < 10 ; i++){
results.add(exec.submit(new Counter2(10)));
}
exec.shutdown();
for (Future<String> future:results) {
System.out.println(future.isDone());
try {
System.out.println(future.get());
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
exec.shutdown();
}
}
}