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】。文章转载请联系作者。
评论