callable和runable以及线程池对他们的执行
来源:互联网 发布:软件项目成果 编辑:程序博客网 时间:2024/06/05 19:12
一 Callable接口和Runnable接口相似,都是执行新线程的方法。
区别:
1. Callable需要实现call方法,而Runnable需要实现run方法;
2. Callable与executors联合在一起,在任务完成时可立刻获得一个更新了的Future,runable无返回值
Future接口,一般都是取回Callable执行的状态用的。其中的主要方法:
cancel,取消Callable的执行,当Callable还没有完成时
get,获得Callable的返回值 (根据新建callable时候的泛型,这里直接获取。比如:
public class CallAbleTestThread implements Callable<String>{
@Override
public String call() throws Exception {
System.out.println(Thread.currentThread().getName());
return Thread.currentThread().getName()+",返回了";
}
}
// 构造一个线程池
ThreadPoolExecutor threadPool = new ThreadPoolExecutor(2, 4, 3,
TimeUnit.SECONDS, new ArrayBlockingQueue<Runnable>(3),
new ThreadPoolExecutor.DiscardOldestPolicy());
System.out.println(threadPool.submit(new CallAbleTestThread()).get());
这里打印:pool-2-thread-1,返回了
isCanceled,判断是否取消了
isDone,判断是否完成
3.线程池调用时,Runnable是用execute方法执行无返回值,Callable用submit执行返回一个Future
Future<String> fu = threadPool.submit(new CallAbleTestThread());
threadPool.execute(new RunAbleTestThread());
二。线程池的关系
ThreadPoolExecutor extends AbstractExecutorService implements(interface) ExecutorService extends (interface) Executor
有时候使用Executors构造线程池,例如:
ExecutorService executor = Executors.newFixedThreadPool(10);
实际上构造的也是一个ThreadPoolExecutor,源码如下:
总:execute方法是由 Executor接口定义,submit方法是由ExecutorService接口定义。
所以ThreadPoolExecutor 必然可使用 submit获取线程的返回值
- callable和runable以及线程池对他们的执行
- 对Thread类的继承、Runable接口的实现,以及线程池的简单理解
- Thread--01在线程池使用Callable和Runnable的区别以及如何关闭线程
- java 使用Callable和Future返回线程执行的结果
- Java多线程Thread类和Runable接口的区别以及线程类详解
- java利用线程池(ExecutorService)配合Callable和Future实现执行方法超时的阻断
- java 线程池 执行callable 的返回值问题
- java 线程池执行 callable 接口,future 接收callable 接口的返回值
- 线程池利用FutureTask执行Callable子类,获取执行结果的例子
- Thead、runable、callable总结
- Java多线程编程Runable,Callable,Feature区别和用法
- 使用Callable和Future两个类,来获得线程执行后的结果
- 线程学习二:线程池执行Runnable与Callable
- 06____线程返回执行结果(Callable和Future)
- Callable拿到线程执行结果
- Callable和Future的线程实现
- Callable接口实现线程执行结果的返回
- 创建执行线程的方式三:实现 Callable 接口
- Android学习碎片(一)——startActivityForResult
- 一个数组a[0...n-1],求a[j]-a[i]的最大值,其中i<j
- eclipse设置黑色主题
- tomcat 配置内存
- Junit
- callable和runable以及线程池对他们的执行
- 最简单的基于SlidingMenu仿QQ侧滑效果
- Maven环境搭建入门Hello World
- android在代码中设置Spinner默认选中的值
- UVa1411-Ants
- How to Improve Speed Reading Skills
- android在代码中利用Spinner控件设置联动地区的解决办法
- iOS9 3DTouch开发 知识点详解
- JAVA类与对象学习笔记