博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Callable、Runnable、Future、Executor的详细使用方法
阅读量:6124 次
发布时间:2019-06-21

本文共 1330 字,大约阅读时间需要 4 分钟。

1.Runnable接口

实现Runnable接口的类必须使用Thread类的实例才能创建线程(事实上,Thread类也实现了Runnable接口),它允许你定义一个可以由线程完成的任务。如大多数人所已知的那样,它只提供了一个run方法,该方法既不接受任何参数,也不返回任何值。如果你需要从一个未完成的任务中返回一个值,你就必须在该接口之外使用一个方法去等待该任务完成时通报的某种消息。例如:

Runnable runnable = ...;     Thread t = new Thread(runnable);     t.start();     t.join();     String value = someMethodtoGetSavedValue()

从严格上来说,其实上述代码是没有问题的,但是自从JAVA5.0以后,引入了Callable接口。

 

2.Cabllable接口

Callable接口其实与Runnable接口类似,只不过Runnable接口是实现run方法,而Callable接口实现call方法。参照Callable的API,该方法可以返回一个Object对象,或可返回任何一个在泛型化格式中定义了的特定类型的对象。因为你不可能把Callable对象传到Thread对象去执行,你可换用ExecutorService对象去执行Callable对象。该服务接受Callable对象,并经由submit方法去执行它。 提交一个Callable对象给ExecutorService会返回一个Future对象。然后,Future的get方法将会阻塞,直到任务完成。call方法的唯一要求是这个值要在call方法的结尾处返回。当Future的get方法稍后被调用时,如果任务运行得很快的话,Future将会自动得到这个值,否则将一直等到该值生成完毕为止。

 

3.Future接口

首先了解Future模式:我有一个任务,提交给了Future,Future替我完成这个任务。期间我自己可以去做任何想做的事情。一段时 间之后,我就便可以从Future那儿取出结果。就相当于下了一张订货单,一段时间后可以拿着提订单来提货,这期间可以干别的任何事情。其中Future接口就是订货单,真正处理订单的是Executor类,它根据Future接口的要求来生产产品。那么,Future接口是Java线程Future模式的实 现,可以来进行异步计算。

 

4.Executor接口

Executor接口执行已提交的 Runnables任务的对象。此接口提供一种将任务提交与每个任务将如何运行的机制(包括线程使用的细节、调度等)分离开来的方法。通常使用 Executor 而不是显式地创建线程。并发编程的一种编程方式是把任务拆分为一些列的小任务,即Runnable,然后在提交给一个Executor执行,Executor.execute(Runnalbe)。Executor在执行时使用内部的线程池完成操作。

转载于:https://www.cnblogs.com/michelleAnn2011/archive/2012/02/16/2355113.html

你可能感兴趣的文章
20172303 2017-2018-2 《程序设计与数据结构》第5周学习总结
查看>>
eclipse中将一个项目作为library导入另一个项目中
查看>>
Go语言学习(五)----- 数组
查看>>
Android源码学习之观察者模式应用
查看>>
Content Provider的权限
查看>>
416. Partition Equal Subset Sum
查看>>
centos7.0 64位系统安装 nginx
查看>>
数据库运维平台~自动化上线审核需求
查看>>
注解开发
查看>>
如何用 Robotframework 来编写优秀的测试用例
查看>>
Django之FBV与CBV
查看>>
Vue之项目搭建
查看>>
app内部H5测试点总结
查看>>
Docker - 创建支持SSH服务的容器镜像
查看>>
[TC13761]Mutalisk
查看>>
三级菜单
查看>>
Data Wrangling文摘:Non-tidy-data
查看>>
加解密算法、消息摘要、消息认证技术、数字签名与公钥证书
查看>>
while()
查看>>
常用限制input的方法
查看>>