JDK7中Runnable和Callable源码概述
来源:互联网 发布:淘宝有情侣网店吗 编辑:程序博客网 时间:2024/06/05 20:03
Runnable是java.lang包下的接口;所有已知子接口:RunnableFuture<V>, RunnableScheduledFuture<V>;所有已知实现类:AsyncBoxView.ChildState, FutureTask, RenderableImageProducer, SwingWorker, Thread, TimerTask。
Runnable接口应该由那些打算通过某一线程执行其实例的类来实现。类必须定义一个称为run的无参数方法。设计该接口的目的是为希望在活动时执行代码的对象提供一个公共协议。例如,Thread类实现了Runnable。激活的意思是说某个线程已启动并且尚未停止。此外Runnable为非Thread子类的类提供了一种激活方式。通过实例化某个Thread实例并将自身作为运行目标,就可以运行实现Runnable的类而无需创建Thread的子类。大多数情况下,如果只想重写run()方法,而不重写其他Thread方法,那么应使用Runnable接口。这很重要,因为除非打算修改或增强类的基本行为,否则不应为该类创建子类。
Callable概述:
Callable<V>是java.util.concurrent包下的接口,类型参数:V-call方法的结果类型;所有已知子接口:JavaCompiler.CompilationTask。
Callable<V>返回结果并且可能抛出异常的任务。实现者定义了一个不带任何参数的叫做call的方法。Callable接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是Runnable不会返回结果,并且无法抛出经过检查的异常。Executors类包含一些从其他普通形式转换成Callable类的实用方法。
Callable<V>只提供了V call()throws Exception方法:返回计算的结果,如果无法计算结果,则抛出一个异常。
Callable和Runnable的异同:
1.Callable是需要实现call()方法的接口,Runnable是需要实现run()方法的接口;call()方法可以抛出异常,run()方法的异常无法抛出(需要手动处理)
2.Callable可传入泛型参数,Runnable则不需要;Callable可返回泛型参数结果,Runnable返回void
3.都可以作为任务去执行,Callable通过FutureTask可知道任务的状态和结果,Runnable无法获知任务状态【可获取线程状态】和结果
4.Runnable实例对象需要Thread包装启动,Callable实例对象需要先通过FutureTask包装再交给Thread包装执行
实现可参考:https://github.com/chunericli/wise-utils
- JDK7中Runnable和Callable源码概述
- JDK7中BlockingQueue和Queue源码概述
- JDK7中ThreadFactory和RejectedExecutionHandler源码概述
- JDK7中Condition源码概述
- JDK7中Lock源码概述
- JDK7中ReadWriteLock源码概述
- JDK7中Executor源码概述
- JDK7中ExecutorService源码概述
- JDK7中Executors源码概述
- JDK7中ThreadPoolExecutor源码概述
- JDK7中Future,FutureTask和RunnableFuture源码概述
- Java Callable 和Runnable
- Callable和Runnable
- Java Callable 和Runnable
- Thread、Runnable和Callable
- Thread、Runnable和Callable
- Callable ,Runnable 和 Thread
- Runnable、Callable和Future
- Java基础总结
- 生产计划管理软件功能是什么?对生产管理有何好处?
- 算法9 Group Anagrams
- 三行代码实现 TabLayout+ViewPager 的 Tab 滑动效果,从封装到开源
- oracle中存储过程的三种异常捕获方式
- JDK7中Runnable和Callable源码概述
- RecyclerView与ScrollView嵌套,抢占焦点的问题
- Linux下VSFTPD配置全方案
- class path resource [spring-mvc.xml] cannot be opened because it does not exist
- redis与spring cache集成
- Android抽象任务管理框架QTaskManager及其使用方式介绍
- 既然有http 请求,为什么还要用rpc(dubbo接口)调用?
- 整理关于java实现二维码的生成和解析代码供大家参考
- java时间还在用date和calender?换LocalDateTime吧!