java 线程 返回值_Java 实现线程的方式有几种方式?带有返回值的线程怎么实现?...

Java中实现线程主要有四种方式:继承Thread类、实现Runnable接口、实现Callable接口以及使用线程池。对于带有返回值的线程,可以通过实现Callable接口,结合FutureTask来获取线程执行结果。在FutureTask的get方法中可以获取到call方法的返回值,从而实现线程间数据传递。线程池创建的线程同样可以处理返回值,灵活性更高。
摘要由CSDN通过智能技术生成

Java 实现线程的方式有几种方式?带有返回值的线程怎么实现?

在Java线程开发中,有几种方法开启线程?假如需要得到线程返回的信息怎么办?可以实现吗?凯哥将通过源码和大家一起分享下线程怎么将返回值带回来的。

一:无返回值类型的

1:继承Thread类

2:实现Runnable接口

这两种是大家常用的,代码demo就截图吧。

1:继承Thread类的写法

定义:一个类型需要extends thread类,然后实现thread类的run方法。

e24504f36d0fdfac1295a704ad87ba22.png

编辑

2:实现Runnable接口的写法:

定义一个类,实现Runable接口,重新run方法。

New个thread对象,使用有参构造器,参数是runnable的。然后thread.start()

45a056803fa61179d1b381ae812a1aa6.png

二:带有返回值的

3:实现Callable接口

操作步骤:

一个类实现Callable接口,重新call方法;

在调用的时候,需要使用FutureTask这个类的有参构造,然后再使用thread的有参构造。

最后调用task的get方法。

代码如下:

bf455008713e312498f394f31a083c3b.png

运行结果:

7ca353a5672715a01cc7de748f4f8772.png

Callable返回值的源码:

我们从FutureTask这个类入手,因为返回值就是从FutureTask中获取的。来看看类关系图:

9506c2bb8a9b1c448fe9eafc996bf83c.png

FutureTask实现了RunnableFuture接口,RunnableFuture接口继承了Future和Runnable接口。

e4d24aab4851b8219ae5e651861f2629.png

ea2cc1468a5479851eb27c5ea11a2b03.png

我们看RunnableFuture这个接口的时候,发现只有一个无返回值的run方法。那么,线程返回的数据是哪个类实现的呢?其实就在FutureTask类里面。我们在来看看FuntrueTask这个类:

93171c11a4a66bab27221fd77af99f64.png

重新了run方法。最后,有个set result。既然有set方法。在来看看demo中task.get()方法:

1ba52690dbf837edd91df02e8aef5cf7.png

Get方法就带有返回值的。

至此,实现callable接口带有返回值的原因已经找到了。

4:使用线程池创建线程

使用线程池创建的线程,可以有返回值,也可以没有返回值。使用Executory这个顶级接口来处理。

我们先来看看Executor接口的关系。如下图:

1d8c0ffb3b5ce2daa3417aaf94eeabcd.png

其中看到了熟悉的ThreadPoolExecutor和ScheduledThreadPoolExecutor

4.1:使用Executor创建没有返回值得线程:

346a2baf6921d9110e63a900d5bd1503.png

说明:这里不带返回值的,其实就是调用了Runnable的run方法。

4.2:带有返回值的demo

创建一个类,实现Callable接口。如下图:

067f29805ff3aff1ff8b90b803dc8ec1.png

通过这个接口,我们知道是有返回值的。

三:总结

Java中实现线程有4种方式:

我们最熟悉的不带换回值的两种以及带有返回值的两种。分别是:

Thread、Runnable和Callable以及线程池

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值