Callable接口详解
Callable:返回结果并且可能抛出异常的任务。优点:可以获得任务执行返回值;通过与Future的结合,可以实现利用Future来跟踪异步计算的结果。
Runnable和Callable的区别:
Callable规定的方法是call(),Runnable规定的方法是run().Callable的任务执行后可返回值,而Runnable的任务是不能返回值得call方法可以抛出异常,run方法不可以运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果。代码示例://Callable接口publicinterfaceCallable
Future接口
Future是一个接口,代表了一个异步计算的结果。接口中的方法用来检查计算是否完成、等待完成和得到计算的结果。当计算完成后,只能通过get()方法得到结果,get方法会阻塞直到结果准备好了。如果想取消,那么调用cancel()方法。其他方法用于确定任务是正常完成还是取消了。一旦计算完成了,那么这个计算就不能被取消。
FutureTask类实现了RunnableFuture接口,而RunnnableFuture接口继承了Runnable和Future接口,所以说FutureTask是一个提供异步计算的结果的任务。FutureTask可以用来包装Callable或者Runnbale对象。因为FutureTask实现了Runnable接口,所以FutureTask也可以被提交给Executor。
Callable两种执行方式
借助FutureTask执行FutureTask类同时实现了两个接口,Future和Runnable接口,所以它既可以作为Runnable被线程执行,又可以作为Future得到Callable的返回值。具体流程://定义实现Callable接口的的实现类重写call方法。publicclassMyCallableTaskimplementsCallable
举例说明
StopWatch的使用
Spring提供的计时器StopWatch对于秒、毫秒为单位方便计时的程序,尤其是单线程、顺序执行程序的时间特性的统计输出支持比较好。也就是说假如我们手里面有几个在顺序上前后执行的几个任务,而且我们比较关心几个任务分别执行的时间占用状况,希望能够形成一个不太复杂的日志输出,StopWatch提供了这样的功能。而且Spring的StopWatch基本上也就是仅仅为了这样的功能而实现。publicStringcall()throwsException{StopWatchstopWatch=newStopWatch();stopWatcstart('测试StopWatch');//TODO业务逻辑stopWatcstop();return'test';}
文章为作者独立观点,不代表 股票程序化软件自动交易接口观点