Java 多线程 Callable 和 Future
一、说明
Java 提供了三种创建线程的方法
实现
Runnable接口继承
Thread类本身通过
Callable和Future创建线程
Callable 和 Future 的引入
继承
Thread或实现Runnable接口,任务执行完成后无法获取执行结果而要获取执行结果,必须通过共享变量或者使用线程通信的方式来达到效果
Java 1.5 开始引入了
Callable和Future,执行任务完成后可获取执行结果,简单来说就是一个产生结果,一个拿到结果
ExecutorService
ExecutorService是 Java 中对线程池定义的一个接口,继承Executor接口,用于管理线程对象,可以使用Executors工厂类来创建ExecutorService的实例(即线程池)
ExcutorService提供的三种方法都有相应的结果返回
同时
Executors类提供方法能把Runnable对象包装成Callable对象
二、理解
Callable
java.lang包下Runnable接口.run()方法返回类型为void
java.util.concurrent包下Callable接口,.call()方法返回的类型为传递进来的V - Value(值)类型
实现方法
Runnable或Callable实现类使用ExecutorSevice接口的.submit()方法提交,不使用没有返回值的.execute()方法
Future
java.util.concurrent包下Future<V>接口,对Runnable或Callable对象执行任务完成后获取执行结果
mayInterruptRunning表示是否中断执行中的线程boolean cancel()尝试取消任务的执行,如果任务已经完成或已被取消,则返回 false;如果任务已经启动,将以中断执行线程的方式停止该任务,停止成功则返回 trueboolean isDone()若任务完成,则返回 trueboolean isCancelled()若任务在完成前取消,则返回 trueget()获取执行结果,必须等待任务完成后才返回结果get(long timeout, TimeUnit unit)获取执行结果,timeout 表示等待的最长时间,unit 表示时间单位,在指定时间内还没获取到结果,则返回 null
三、实现
1.实现接口
创建CallableThreadDemo类实现Callable接口
2.执行线程
创建CallableTest类执行测试,将创建好的线程对象通过.submit()方法提交到线程池去执行,线程执行后,返回值Future可被拿到
版权声明: 本文为 InfoQ 作者【Yeats_Liao】的原创文章。
原文链接:【http://xie.infoq.cn/article/af63c14a49847f659ce8cf12e】。文章转载请联系作者。










评论