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

Wesley13
• 阅读 510

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

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

一:无返回值类型的

1:继承Thread类

2:实现Runnable接口

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

1:继承Thread类的写法

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

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

编辑

2:实现Runnable接口的写法:

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

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

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

编辑

二:带有返回值的

3:实现Callable接口

操作步骤:

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

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

最后调用task的get方法。

代码如下:

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

编辑

运行结果:

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

编辑

Callable返回值的源码:

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

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

编辑

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

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

编辑

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

编辑

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

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

编辑

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

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

编辑

Get方法就带有返回值的。

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

4:使用线程池创建线程

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

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

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

编辑

其中看到了熟悉的ThreadPoolExecutor和ScheduledThreadPoolExecutor

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

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

编辑

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

4.2:带有返回值的demo

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

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

编辑

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

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

编辑

三:总结

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

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

Thread、Runnable和Callable以及线程池

点赞
收藏
评论区
推荐文章
wanQQ wanQQ
2年前
Java学习 Day01 多线程
Java学习Day01多线程Java多线程实现方式有2种1.继承Thread类,重写run方法案例测试类Thread01Javapackagetop.wanqq.thread;/@authorwanqq/publicclassThread01extendsThread@Overridepubli
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
灯灯灯灯 灯灯灯灯
3年前
阿里二面必备考题之Java并发!全面解析
一、使用线程有三种使用线程的方法:实现Runnable接口实现Callable接口继承Thread类实现Runnable和Callable接口的类只能当做一个可以在线程中运行的任务,不是真正意义上的线程,因此最后还需要通过Thread来调用。可以理解为任务是通过线程驱动从而执行的。实现Runnable接口cpublicclass
Wesley13 Wesley13
3年前
java多线程实现的三种方式
JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的。1、继承Thread类实现多线程继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现
Wesley13 Wesley13
3年前
java多线程相关
Runnablerunnable是线程实现的一种方式(接口实现),它只有一个run()函数,用于将耗时操作写在其中,该函数没有返回值。然后使用某个线程去执行该runnable的实现运行多线程程序,Thread类在调用start()函数后就是执行的是runnable的run()函数。runnable的声明如下:publicinterfac
Wesley13 Wesley13
3年前
java线程
1.进程和线程的区别是什么?进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫轻量级进程。2.创建线程有几种不同方式?你喜欢哪种?为什么?有三种方式可以用来创建线程:继承Thread类实现Runnable接口应用程序可以使用Executor框架来创建线程池实现Runnabl
Wesley13 Wesley13
3年前
Java多线程带返回值的Callable接口
Java多线程带返回值的Callable接口在面试的时候,有时候是不是会遇到面试会问你,Java中实现多线程的方式有几种?你知道吗?你知道Java中有可以返回值的线程吗?在具体的用法你知道吗?如果两个线程同时来调用同一个计算对象,计算对象的call方法会被调用几次你知道吗?如果这些你知道,那么凯哥(凯哥Java:kaigejava)恭喜你,本文你可以不用
Wesley13 Wesley13
3年前
Java多线程学习笔记
Java中创建多线程的三种方法1、继承Thread类创建线程2、实现Runnable接口创建线程3、使用Callable和Future创建线程\
Wesley13 Wesley13
3年前
Java多线程 简记
1、实现多线程方法继承Thread类或者实现Runnable接口2、Thread 和Runnable区别实现Runnable接口比继承Thread类所具有的优势:1):适合多个相同的程序代码的线程去处理同一个资源2):可以避免java中的单继承的限制3):增加程序的健壮性,代码可以被多个
Wesley13 Wesley13
3年前
JAVA面试专题二:线程
文章目录       1、创建线程有几种不同的方式?你喜欢哪一种?为什么?       2、什么是线程池?为什么要使用它?       3、线程池的有几种实现方式       4、Runnable接口和Callable接口的区别       5、start()方法和run()方法的区别