java实例教程,java runnable
在java中,实现线程的方法不仅有runnable接口、Thread类,还有callable接口,但runnable接口和Thread类没有返回值。
然而,callable接口的实现可以返回值;
编写代码时,有两种方法可以检索返回值
具体方法请参阅以下代码
使用FutureTask和线程池完成回调。
分析源代码
首先,在简历线程池中,您可以看到较低级别的实现具有同步队列。 这意味着线程等待在队列中进行
线程创建(如ThreadFactory、线程制造工厂和线程池)与此类有关
由ThreadPoolExecutor导入的软件包
可以看到abstractqueuedSynchronizer aqs、lock锁定和condition条件控制类
接下来,观察线程池如何在低层实现线程的切换和锁定的应用
2.1 runnable和callable的区别
runnable和callable都可以用于创建多线程程序。 区别如下。
实现runnable接口后无法返回结果信息,实现callable接口后有返回值。
runnable接口异常可以实现throws中不能抛出异常,callable接口实现后可以直接抛出Exception异常
2.2什么是future?
使用callable接口实现多线程时,使用FutureTask检索返回值。 Future和FutureTask是什么?
Future是获取异步计算结果的接口,FutureTask是Future的实现类。
公共界面功能{
布尔序列取消(布尔序列互连传输函数;
布尔is cancelled (;
布尔is done (;
V get ) ) throws InterruptedException,ExecutionException;
vget (长时间输出,时间单元单元) )。
throws InterruptedException,ExecutionException,TimeoutException;
}
future接口的源代码很简单,实现了五种方法
boolean cancel (…(booleanmayinterruptrunning ) :如果任务尚未启动,则cancel )…)方法将返回false; 如果任务已经启动,则cancel (执行true方法会尝试停止任务以中断此任务线程的执行,如果停止成功,则返回true。 如果任务已经启动,则执行cancel(false )方法不会影响正在运行的任务线程。 (运行到线程成功完成。 )这种情况下,返回false。 任务完成后,执行cancel(…)方法将返回false。 mayInterruptRunning参数指示是否中断正在运行的线程。
boolean isCanceller () :如果在任务完成之前取消,则返回true。
boolean isDone () )任务执行结束时,正常结束、中途取消或即使发生异常也会返回true。
V get () :获取异步执行的结果。 如果没有结果,则会阻止此方法直到异步计算完成。
长时间输出,时间单元(vget ) :获取异步执行结果,如果没有结果则阻止,但有时间限制,如果阻止时间超过了设置的时间输出时间,则抛出异常。
Future实现了可以中断正在执行的任务、可以判断任务是否还在执行、可以取得任务执行后的结果等功能。 FutureTask是Future接口的常见实现类