Executor
执行接口 只有一个方法 void execute(Runnable command) 用来执行任务
ExecutorService 是接口Executor的子类 同时提供对线程池的关闭,执行,等方法
Executors 提供一些静态方法用于创建各种类型的线程池
Runnable 是一个接口,使用很简单
1.实现该接口,重写run方法
2.创建线程
3.线程启动后就会调用该对象的run方法
通常在开发中结合 ExecutorService 使用 ,将任务的提交与执行解耦开来
相对于Callable 以及 Future, Runnable方法不返回任务执行结果并且不能抛出异常
Callable
与Runnable 不同的是,Callable是个泛型参数化接口,并能返回线程的执行结果,并且能在无法计算时抛出异常
V call() throws Exception;
1.Callable并不像Runnable那样通过Thread的start方法就能启动实现类的run方法,所以他通常是利用ExecutorService的submit方法去启动call方法自执行任务
而ExecutorService的submit又返回一个Future类型的结果,因此Callable通常也和Future一起使用
或者利用FutureTask封装Callable再由Thread去启动(少用)
通过Executors.callable(Runnable task,T result)可以执行Runnable并返回结果,但是这个结果并不是Runnable的执行结果,而是执行者预定义的结果
Runnable与Callable不同点
1.Runnable不返回任务执行结果,Callable可返回任务执行结果
2.Callable在任务无法计算结果时抛出异常,Runnable不能
3.Runnable任务可直接有Thread的start方法或ExecutorService的submit方法去执行
Future
保存异步计算的结果,可以在我们执行任务时去做其它的工作,并提供了一下几个方法
cancel(boolean mayInterruptIfRunning):试图取消执行的任务,参数为true时直接中断正在执行的任务,否则直到当前任务执行完成,成功取消后返回true,否则返回false
isCancel():判断任务是否在正常执行完前被取消的,如果是则返回true
isDone():判断任务是否已完成
get():等待计算结果的返回,如果计算被取消了则抛出
get(long timeout,TimeUtil unit):设定计算结果的返回时间,如果在规定时间内没有返回计算结果则抛出TimeOutException
使用Future的好处
1. 获取任务的结果,判断任务是否完成,中断任务
1. Future的get方法很好的替代的了Thread.join或Thread,join(long millis)
2. Future的get方法可以判断程序代码(任务)的执行是否超时
FutureTask
FutureTask 实现了RunnableFuture接口,提供了即可以使用Runnable来执行任务,又可以使用Future执行任务并取得结果的构造器,
所以可以利用FutureTask去封装Runnable或Callable对象,之后在submit任务
ExecutorService 是接口Executor的子类 同时提供对线程池的关闭,执行,等方法
Executors 提供一些静态方法用于创建各种类型的线程池
Runnable 是一个接口,使用很简单
1.实现该接口,重写run方法
2.创建线程
3.线程启动后就会调用该对象的run方法
通常在开发中结合 ExecutorService 使用 ,将任务的提交与执行解耦开来
相对于Callable 以及 Future, Runnable方法不返回任务执行结果并且不能抛出异常
Callable
与Runnable 不同的是,Callable是个泛型参数化接口,并能返回线程的执行结果,并且能在无法计算时抛出异常
V call() throws Exception;
1.Callable并不像Runnable那样通过Thread的start方法就能启动实现类的run方法,所以他通常是利用ExecutorService的submit方法去启动call方法自执行任务
而ExecutorService的submit又返回一个Future类型的结果,因此Callable通常也和Future一起使用
或者利用FutureTask封装Callable再由Thread去启动(少用)
通过Executors.callable(Runnable task,T result)可以执行Runnable并返回结果,但是这个结果并不是Runnable的执行结果,而是执行者预定义的结果
Runnable与Callable不同点
1.Runnable不返回任务执行结果,Callable可返回任务执行结果
2.Callable在任务无法计算结果时抛出异常,Runnable不能
3.Runnable任务可直接有Thread的start方法或ExecutorService的submit方法去执行
Future
保存异步计算的结果,可以在我们执行任务时去做其它的工作,并提供了一下几个方法
cancel(boolean mayInterruptIfRunning):试图取消执行的任务,参数为true时直接中断正在执行的任务,否则直到当前任务执行完成,成功取消后返回true,否则返回false
isCancel():判断任务是否在正常执行完前被取消的,如果是则返回true
isDone():判断任务是否已完成
get():等待计算结果的返回,如果计算被取消了则抛出
get(long timeout,TimeUtil unit):设定计算结果的返回时间,如果在规定时间内没有返回计算结果则抛出TimeOutException
使用Future的好处
1. 获取任务的结果,判断任务是否完成,中断任务
1. Future的get方法很好的替代的了Thread.join或Thread,join(long millis)
2. Future的get方法可以判断程序代码(任务)的执行是否超时
FutureTask
FutureTask 实现了RunnableFuture接口,提供了即可以使用Runnable来执行任务,又可以使用Future执行任务并取得结果的构造器,
所以可以利用FutureTask去封装Runnable或Callable对象,之后在submit任务