private void futureInvokeResult() { ExecutorService executor = Executors.newFixedThreadPool(3); long mills = System.currentTimeMillis(); Callable<String> callable = () -> { Thread.sleep(2000);return "123"; }; Future<String> future1 = executor.submit(callable); Future<String> future2 = executor.submit(callable); Future<String> future3 = executor.submit(callable); /**没有刻意抛出异常的状况*/ try { System.out.println("Answer :" + future1.get(4, TimeUnit.SECONDS) + future2.get(4, TimeUnit.SECONDS) + future3.get(4, TimeUnit.SECONDS)); } catch (Exception e) { System.out.println(e); } System.out.println("总耗时:" + (System.currentTimeMillis() - mills)); executor.shutdown(); }
运行结果java
Answer :123123123
总耗时:2067web
private void futureInvokeResult() { ExecutorService executor = Executors.newFixedThreadPool(3); long mills = System.currentTimeMillis(); Callable<String> callable = () -> { Thread.sleep(2000);return "123"; }; Callable<String> callable2 = () -> { throwException();return "123"; }; Future<String> future1 = executor.submit(callable); Future<String> future2 = executor.submit(callable2); Future<String> future3 = executor.submit(callable); /**刻意抛出异常的状况*/ try { System.out.println("Answer :" + future1.get(4, TimeUnit.SECONDS) + future2.get(4, TimeUnit.SECONDS) + future3.get(4, TimeUnit.SECONDS)); } catch (InterruptedException e) { System.out.println(e); }catch (ExecutionException e) { System.out.println(e); }catch (TimeoutException e) { System.out.println(e); }catch (Exception e) { System.out.println(e); } System.out.println("总耗时:" + (System.currentTimeMillis() - mills)); executor.shutdown(); } private void throwException() throws TimeoutException{ throw new RuntimeException("111"); }
java.util.concurrent.ExecutionException: java.lang.RuntimeException: 111
总耗时:2057编程
public interface Future<V> { //试图去cancel线程的执行,mayInterruptIfRunning为true时,能够cancel执行中的线程, //如果线程已经执行完、、已经取消或不能取消,则返回false,未开始、不能执行返回true; boolean cancel(boolean mayInterruptIfRunning); //在它完成前,是否已经取消 boolean isCancelled(); //正常结束、异常终止或取消,返回true boolean isDone(); //尝试去获取结果,并等待执行完成 V get() throws InterruptedException, ExecutionException; //尝试去获取结果,并等待执行完成,超时则异常 V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException; }
二:Future的缺点和改进并发