Future<V> {/** * Sets this Future to the result of its computation * unless it has been cancelled. */voidrun();}RunnableFuture是Future和Runnable接口的组合,即这个接口表示又可以被线程异步执行,因为实现了Runnable接口,又可以获得线程异步任务的执行结果,因为实现了Future接口。因此解决了Runn...
2、把Callable实例当作参数,生成一个FutureTask的对象,然后把这个对象当作一个Runnable,作为参数另起线程。 public class FutureTask<V> implements RunnableFuture<V> 1. public interface RunnableFuture<V> extends Runnable, Future<V> 1. public interface Future<V> { boolean cancel(boolean mayInterruptIfRunning)...
publicclassFutureTask<V>implementsRunnableFuture<V> FutureTask类实现了RunnableFuture接口,我们看一下RunnableFuture接口的实现: 1 2 3 publicinterfaceRunnableFuture<V>extendsRunnable, Future<V> { voidrun(); } 可以看出RunnableFuture继承了Runnable接口和Future接口,而FutureTask实现了RunnableFuture接口。所以它既可以...
比起future.get(),其实更推荐使用get (long timeout, TimeUnit unit) 方法,设置了超时时间可以防止程序无限制的等待future的结果。 二. CompletableFuture介绍 2.1 Future模式的缺点 Future虽然可以实现获取异步执行结果的需求,但是它没有提供通知的机制,我们无法得知Future什么时候完成。 要么使用阻塞,在future.get()...
java复制代码public class FutureTask implements RunnableFuture { protected void done() { } } 2.4. cancel 方法实现 canncel 可以取消任务,取消后未发起的任务将不会被发起,对于已经发起的任务可以选择是否尝试中断。 FutureTask 中只有状态为 NEW 时才可以 cancel,因为状态为 NEW 的任务表示还未执行或者还在执行...
public abstract void run(); } Runnable没啥好说的,相信大家都已经很熟悉了。 代码语言:txt 复制 // Future.java public interface Future<V> { /** * 尝试取消线程任务的执行,分为以下几种情况: * 1)如果线程任务已经完成或已经被取消或其他原因不能被取消,此时会失败并返回false; ...
final FutureData future = new FutureData(); new Thread() { public void run() { // RealData的构建很慢,所以在单独的线程中进行 RealData realdata = new RealData(queryStr); //setRealData()的时候会notify()等待在这个future上的对象
public interface RunnableFuture<V> extends Runnable, Future<V> { /** * Sets this Future to the result of its computation * unless it has been cancelled. */ void run(); } 1. 2. 3. 4. 5. 6. 7. 8. 9. RunnableFuture是Future和Runnable接口的组合,即这个接口表示又可以被线程异步执行,...
CompletableFuture并非一定要交给线程池执行才能实现异步,你可以像下面这样实现异步运行: 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 publicstaticvoidmain(String[]args)throws ExecutionException,InterruptedException{CompletableFuture<String>completableFuture=newCompletableFuture();//自己开个线程去执行 ...
Future是线程的契约,通过其get()方法我们可以获取线程执行的结果,当然Future也提供了其他三个方法,分别是: cancel:取消任务 isCancelled:任务是否已经取消 isDone:任务是否完成 3.3 RunnableFuture publicinterfaceRunnableFuture<V>extendsRunnable,Future<V>{voidrun();} ...