Java线程池实现原理与技术,看这一篇就够了
关于ThreadPoolExecutor ,前面第3节已经详细叙述。ScheduledThreadPoolExecutor 也是ExecutorService接口的实现类,可以在给定的延迟后运行命令,或者定期执行命令。ScheduledThreadPoolExecutor 比 Timer 更灵活,功能更强大。 4.4 Future与FutureTask 上面的示例中使用 execute() 方法提交任务,,用于提交不需要返回值的任务。如果我们需要获取执行任务之后的返回值,可以使用submit()方法。 示例代码:
运行结果:
到这里,就不得不提Future接口与FutureTask实现类,它们代表异步计算的结果。
当我们submit()提交后,会返回一个Future对象,到JDK1.8,返回的实际是FutureTask实现类。submit() 方法支持 Runnable 或 Callable 类型的参数。Runnable 接口 和Callable 接口的区别就是 Runnable 不会返回结果,Callable 会返回结果。 主线程可以执行 futureTask.get() 方法来阻塞当前线程直到任务执行完成,任务完成后返回任务执行的结果。 futureTask.get(long timeout, TimeUnit unit) 方法则会阻塞当前线程一段时间立即返回,这时候有可能任务没有执行完。 主线程也可以执行 futureTask.cancel(boolean mayInterruptIfRunning) 来取消此任务的执行。 futureTask.isCancelled方法表示任务是否被取消成功,如果在任务正常完成前被取消成功,则返回 true。 futureTask.isDone方法表示任务是否已经完成,若任务完成,则返回true。 【编辑推荐】
点赞 0 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |