JAVA异步编程-Future

537 阅读2分钟

JAVA异步编程

在Java中,常见的是通过Future来实现异步编程.

Future是什么

Future存在于JUC包(JUC:JAVA的并发包)中,是一个异步返回的接口,Future代表的是异步计算出来的结果.

Future 里有什么

Future中有5个常用的方法,我们可以看看Future里的源码:

image.png

灵魂发问: 这五个方法都有什么用

Future内部的方法

这五种方法一一介绍一下:

  • V get(); 这个方法是等待计算完成,然后返回一个计算完成后的结果. 如果当前的任务没有计算完成,会阻塞调用线程直到计算完成. 这个方法会抛出三种异常,如图所示:

ExecutionException:任务计算过程中抛出异常的话,就会抛出这个异常. CancellationException: 如果在等待结果的过程中,其他线程取消了该任务,则抛出这个异常. 如果需要中断这个线程没有中断:会抛出InterruptedException

  • V get(long timeout,TimeUnit unit)throws InterruptedException,ExecutionException,TimeoutException;

相比get()方法多了超时时间,当线程调用了该方法后,在任务结果没 有计算出来前调用线程不会一直被阻塞,而是会在等待timeout个unit 单位的时间后抛出TimeoutException异常后返回。添加超时时间避免 了调用线程死等的情况,让调用线程可以及时释放。

这个方法多了个超时时间的参数,当调用的线程没有在规定时间内返回结果,就会报错.

  • boolean isDone(): 如果计算任务已经完成则返回true,否则 返回false。、在这里任务完成的意思是指任务正常的计算出来结果并返回,或者是计算过程抛出 异常而完成了或者任务被取消了

  • boolean cancel(boolean mayInterruptIfRunning): 这个方法用来尝试取消任务的执行,乳沟任务完成了或者已经被取消了,在调用这个方法去取消会失败,

  • boolean isCancelled(): 这个方法表示如果任务在执行完成之前就被取消了,则该方法返回true,告知调用者任务已经被取消,否则返回false。