实现Runnable的线程类不能够获取到线程的执行结果。
java.util.concurrent.ExecutorService的API
<T> Future<T> submit(Callable<T> task) 提交一个返回值的任务用于执行,返回一个表示任务的未决结果的 Future。這个可以通过Future.get()获取线程的返回结果。
Future<?> submit(Runnable task) 提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。该 Future 的 get 方法在成功 完成时将会返回 null。
<T> Future<T> submit(Runnable task, T result) 提交一个 Runnable 任务用于执行,并返回一个表示该任务的 Future。该 Future 的
get 方法在成功完成时将会返回参数result。
<T> Future<T> submit(Callable<T> task):
public class ExecutorServiceFuture {
/*
* 线程池的大小为5
*/
ExecutorService es = Executors.newFixedThreadPool(5);
public void action(){
Future<String> [] future= new Future[5];
for (int i = 0; i < 5; i++) {
Executor executor = new Executor("Test"+i);
future[i] = es.submit(executor);//通过线程池来执行
}
es.shutdown();
for (Future<String> f : future) {
try {
System.out.println(f.get());
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Executor implements Callable<String>{
private String s;
public Executor(){}
public Executor(String str){
this.s = str;
}
@Override
public String call() throws Exception {
//System.out.println(Thread.currentThread().getName()+"开始了...");
//System.out.println(Thread.currentThread().getName()+"结束了...");
return this.s;
}
}
public static void main(String[] args) {
ExecutorServiceFuture t = new ExecutorServiceFuture();
t.action();
}
}
执行结果:
Test0
Test1
Test2
Test3
Test4
<T> Future<T> submit(Runnable task, T result) :
public class ExecutorServiceRunnable {
/*
* 线程池的大小为5
*/
ExecutorService es = Executors.newFixedThreadPool(5);
public void action(){
Future<Integer> [] future= new Future[5];
for (int i = 0; i < 5; i++) {
RunnableTest t = new RunnableTest(String.valueOf(i));
future[i] = es.submit(t, i);
}
es.shutdown();
for (Future<Integer> f : future) {
try {
System.out.println(f.get());
} catch (Exception e) {
e.printStackTrace();
}
}
}
class RunnableTest implements Runnable
{
private String s;
public RunnableTest(){}
public RunnableTest(String string){
this.s = string;
}
@Override
public void run() {
//System.out.println("进来了..." + s);
}
}
public static void main(String[] args) {
ExecutorServiceRunnable t = new ExecutorServiceRunnable();
t.action();
}
}
执行结果:
0
1
2
3
4