转载: http://blog.csdn.net/bboyfeiyu/article/details/24851847
package cn.stu;
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;
import java.util.concurrent.FutureTask;
/**
*
* 线程能获取返回值
*
*/
public class Main {
static ExecutorService service = Executors.newFixedThreadPool(2);
public static void main(String[] args) throws InterruptedException, ExecutionException {
Main.futureDemo();
Main.futureTaskDemo();
service.shutdown(); // 会阻塞主线程。
System.out.println("我是主线程......");
}
public static void futureDemo() throws InterruptedException, ExecutionException{
Future<String> future = service.submit(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2000);// 会阻塞主线程, 执行完这个代码片段才往下走。
return "future-->测试中--->"+Thread.currentThread().getName();
}
});
System.out.println(future.get());
}
public static void futureTaskDemo() throws InterruptedException, ExecutionException{
FutureTask<String> task = new FutureTask<String>(new Callable<String>() {
@Override
public String call() throws Exception {
Thread.sleep(2000);// 会阻塞主线程, 执行完这个代码片段才往下走。
return "FutureTask-->测试中--->"+Thread.currentThread().getName();
}
});
service.submit(task);
System.out.println(task.get());
}
}
运行结果:
future-->测试中--->pool-1-thread-1
FutureTask-->测试中--->pool-1-thread-2
我是主线程......