再说Runnable、Callable、Future、线程池

本文详细介绍了Java中的Runnable、Callable接口,Future接口以及它们之间的关系。重点讨论了线程池ExecutorService,包括submit与execute方法的区别,线程池的使用示例,特别是FutureTask类在获取任务执行结果时的角色。理解这些概念对于有效管理和控制并发任务执行至关重要。
摘要由CSDN通过智能技术生成

Runnable接口

Runnable接口是关于线程的开发中使用最多的接口,在Handler中,我们可以post一个Runnable任务;我们经常使用的Thread也是Runnable接口的实现类

Runnable接口的run方法无返回值,也无异常抛出,也就是说我们在run方法中的任务一旦执行,我们无法获知任务是否执行完毕以及执行的结果。

源码
public interface Runnable {
   

    public abstract void run();
}

Callable接口

Callable接口与Runable接口很类似,它也提供了一个类似run方法的call方法用于执行任务,但与run方法不同的是,call方法有返回值,且会抛出异常。

源码
public interface Callable<V> {
   

    V call() throws Exception;
}

Future接口

Future接口与Runable接口和Callable接口都不一样,它没有类似的run方法或call方法,所以Future接口不能用来执行任务,并且Future接口设计出来的目的也不是为了执行任务,而是为了获取任务执行的结果,这一点从Future接口的注释中可以看出。

源码
public interface Future<V> {
   

    boolean cancel(boolean mayInterruptIfRunning);

    boolean isCancelled();

    boolean isDone();

    V get() throws InterruptedException, ExecutionException;

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

Runable转为Callable

可以通过Executors类的callable(Runnable task, T result)静态方法,把一个Runable任务转换为Callable任务。
示例:

Callable<Object> callable = Executors.callable(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值