Java 实现线程的方式有几种方式?带有返回值的线程怎么实现?
Java 实现线程的方式有几种方式?带有返回值的线程怎么实现?
在Java线程开发中,有几种方法开启线程?假如需要得到线程返回的信息怎么办?可以实现吗?凯哥将通过源码和大家一起分享下线程怎么将返回值带回来的。
一:无返回值类型的
1:继承Thread类
2:实现Runnable接口
这两种是大家常用的,代码demo就截图吧。
1:继承Thread类的写法
定义:一个类型需要extends thread类,然后实现thread类的run方法。
2:实现Runnable接口的写法:
定义一个类,实现Runable接口,重新run方法。
New个thread对象,使用有参构造器,参数是runnable的。然后thread.start()
二:带有返回值的
3:实现Callable<V>接口
操作步骤:
一个类实现Callable接口,重新call方法;
在调用的时候,需要使用FutureTask这个类的有参构造,然后再使用thread的有参构造。
最后调用task的get方法。
代码如下:
运行结果:
Callable返回值的源码:
我们从FutureTask这个类入手,因为返回值就是从FutureTask中获取的。来看看类关系图:
FutureTask实现了RunnableFuture接口,RunnableFuture接口继承了Future和Runnable接口。
我们看RunnableFuture这个接口的时候,发现只有一个无返回值的run方法。那么,线程返回的数据是哪个类实现的呢?其实就在FutureTask类里面。我们在来看看FuntrueTask这个类:
重新了run方法。最后,有个set result。既然有set方法。在来看看demo中task.get()方法:
Get方法就带有返回值的。
至此,实现callable接口带有返回值的原因已经找到了。
4:使用线程池创建线程
使用线程池创建的线程,可以有返回值,也可以没有返回值。使用Executory这个顶级接口来处理。
我们先来看看Executor接口的关系。如下图:
其中看到了熟悉的ThreadPoolExecutor和ScheduledThreadPoolExecutor
4.1:使用Executor创建没有返回值得线程:
说明:这里不带返回值的,其实就是调用了Runnable的run方法。
4.2:带有返回值的demo
创建一个类,实现Callable接口。如下图:
通过这个接口,我们知道是有返回值的。
三:总结
Java中实现线程有4种方式:
我们最熟悉的不带换回值的两种以及带有返回值的两种。分别是:
Thread、Runnable和Callable以及线程池

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
RSA 2020两名参会者确诊感染新冠病毒,周鸿祎担忧会有更多感染者出现
【金融特辑】光大银行科技部DBA女神带你从0到1揭秘MGR RSA 安全会议主办方周二表示:上月参加旧金山举办的 RSA 网络安全会议的两名与会人员,已被确诊患上新冠病毒感染导致的呼吸系统疾病。网站上的一份声明写道:“据我们了解,两名与会者已被检出 COVID-19 阳性。至于他们是否在参会时已经出现症状或处于潜伏期,目前尚无官方机构向 RSA 会务组发来通报”。 今年的RSA虽然因为疫情影响,美国当地限制了旅居中国的人入境,但还是有一部分厂商仍然出现在RSA的舞台上,例如百度、360、奇安信等等,连红衣教主周鸿�t也亲自奔赴美国。 在得知RSA的疫情通知之后,周鸿�t也发了一条朋友圈表达了自己的担忧:在RSA现场,几千人在密闭空间里人来人往熙熙攘攘摩肩接踵交流交谈握手分发资料,估计还会有更多参会者被监测出来。 笔者大致推算了下时间,RSA于2月28日结束,也就是说现在已经过去了12天。按照14天的隔离期来算的话,在两名参会人员确诊之后,几乎所有的参会人员暂时还未完全解除被感染的风险,包括老周在内。 根据彭博社的消息,其中一名确诊者,是一位来自康涅狄格州的 45 岁工程师,其于 2 月...
- 下一篇
云数据库Redis双副本集群版实例,两种连接模式适合使用场景攻略
云数据库Redis版提供双副本集群版实例,可轻松突破Redis自身单线程瓶颈,满足大容量、高性能的业务需求。Redis集群版支持代理和直连两种连接模式,您可以根据本章节的说明,选择适合业务需求的连接模式。 代理模式 云Redis集群版默认采用代理(proxy)模式,支持通过一个统一的连接地址(域名)访问Redis集群,客户端的请求通过代理服务器转发到各数据分片,代理服务器、数据分片和配置服务器均不提供单独的连接地址,降低了应用开发难度和代码复杂度。代理模式的服务架构图和组件说明如下。 图 1. Redis集群版代理模式服务架构 表 1. Redis集群版代理模式组件说明 各组件的数量和配置由Redis实例的规格决定,不支持自定义修改,但您可以通过变更配置调整集群的大小,或者将实例调整为其它架构。 直连模式 因所有请求都要通过代理服务器转发,代理模式在降低业务开发难度的同时也会小幅度影响Redis服务的响应速度。如果业务对响应速度的要求非常高,您可以使用直连模式,绕过代理服务器直接连接后端数据分片,从而降低网络开销和服务响应时间。直连模式的服务架构和说明如下。 图 2. Redis集群版...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- SpringBoot2全家桶,快速入门学习开发网站教程
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Red5直播服务器,属于Java语言的直播服务器
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7设置SWAP分区,小内存服务器的救世主
- CentOS7安装Docker,走上虚拟化容器引擎之路