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(