jdk介绍:可取消的异步计算。利用开始和取消计算的方法、查询计算是否完成的方法和获取计算结果的方法,此类提供了对 Future
的基本实现。仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就不能再重新开始或取消计算。
相当于新起一个线程去执行,不影响主线程其他代码执行,只不过获取线程结果时需要阻塞等待
代码如下:
package test;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.FutureTask;
public class TestFutureTask {
public static void main(String[] args) {
class Result {
private String str;
}
ExecutorService executorService = Executors.newCachedThreadPool();
final Result result = new Result();
FutureTask<Result> futureTask = new FutureTask<Result>(new Runnable() {
public void run() {
try {
System.out.println("线程" + Thread.currentThread().getName() + "开始执行");
Thread.sleep((long) (Math.random() * 10000));
result.str = "sdsd";
System.out.println("线程" + Thread.currentThread().getName() + "执行完成");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, result);
try {
System.out.println("准备开始执行子任务 ");
executorService.execute(futureTask);
Result r1 = futureTask.get();
System.out.println("线程执行结果:" + r1.str);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
executorService.shutdown();
}
}
执行结果如下:
准备开始执行子任务
线程pool-1-thread-1开始执行
线程pool-1-thread-1执行完成
线程执行结果:sdsd