Runnable runnable = newRunnable{ @Override public voidrun{ System.out.println("你好呀,runnable,关注公众号:捡田螺的小男孩"); } }; Future<?> futureRunnable = executorService.submit(runnable); try { System.out.println("获取runnable的返回结果:"+futureRunnable.get); } catch (InterruptedException e)...
public static void main(String[] args) throws InterruptedException, ExecutionException {FutureTask<String> future = new FutureTask<String>(new Callable<String> {@Overridepublic String call throws Exception {return new RealData.costTime;}});ExecutorService service = Executors.newCachedThreadPool;service.s...
mFuture是FutureTask对象,而mWorker是WorkerRunnable对象,WorkerRunnable是AsyncTask中的一个实现Callable接口的抽象内部类,在WorkerRunnable中只定义了一个Params[]。 privatefinalWorkerRunnable<Params, Result> mWorker;privatefinalFutureTask<Result> mFuture; ...privatestaticabstractclassWorkerRunnable<Params,Result>imple...
public FutureTask(Callable<V> callable) public FutureTask(Runnable runnable, V result) FutureTask 常用来封装 Callable 和 Runnable,可以作为一个任务提交到线程池中执行。除了作为一个独立的类之外,也提供了一些功能性函数供我们创建自定义 task 类使用。 FutureTask 线程安全由CAS来保证。 ExecutorService executor =...
5)V get(long timeout,TimeUnit unit) throws InterruptedException,ExecutionException,TimeoutException:如有必要,最多等待为使计算完成所给定的时间之后,获取其结果(如果结果可用)。 FutureTask类是Future 的一个实现,并实现了Runnable,所以可通过Excutor(线程池) 来执行。也可传递给Thread对象执行。如果在主线程中需要...
Callable接口中的call方法是有返回值的,是一个泛型。它一般配合Future、FutureTask一起使用,用来获取异步执行的结果。 Callable接口call方法允许抛出异常;而Runnable接口run方法不能继续上抛异常; 大家可以看下它俩的API: @FunctionalInterface public interface Callable<V> { ...