FutureTask
1.可取消的异步计算,FutureTask实现了Future的基本方法,提供了start、cancel 操作,可以查询计算是否完成,并且可以获取计算
的结果。结果只可以计算完成之后去获取,get方法会阻塞当前计算没有完成的线程,一定计算完成则会立即释放。
线程池submit与execute
1.submit()可以传入参数为实现callable接口的实例,返回future实例对象。
2.execute()返回void。
package demo2;import java.util.concurrent.*;/** * Created by liudan on 2017/7/31. */public class DemoFuture implements Callable<String> { public String name; public DemoFuture(String name) { this.name = name; } @Override public String call() throws Exception { Thread.sleep(3000); String r = this.name+" 任务处理 success"; return r; } public static void main(String[] args) throws ExecutionException, InterruptedException { FutureTask<String> futureTask1 = new FutureTask<String>(new DemoFuture("订单1")); FutureTask<String> futureTask2 = new FutureTask<String>(new DemoFuture("订单2")); ExecutorService executorService = Executors.newFixedThreadPool(2); Future future1 = executorService.submit(futureTask1); Future future2 = executorService.submit(futureTask2); System.out.println("请求完毕..."); try { System.out.println("处理中..."); Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.err.println("over:"+futureTask1.get().toString()); System.err.println("over:"+futureTask2.get().toString()); //futureTask1.get()方法,假如get不到,则一直等待阻塞自己的线程。 executorService.shutdown(); }}输出:请求完毕...
处理中...
over:订单1 任务处理 success
over:订单2 任务处理 success