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以及线程池

Java 实现线程的方式有几种方式?带有返回值的线程怎么实现?的更多相关文章

  1. Java线程中带有返回值的线程Callable

    在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了.现在Java终于有可返回值的任务(也可以叫做线程)了. 可返回值的任务必须实现C ...

  2. Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  3. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  4. 【java多线程】多线程的创建三种方式--笔记

    申明:线程的概念以及进程的相关概念,可以参考网络上其他资料,这里只讨论多线程是怎么实现. 一.多线程的简单理解 明白什么是多线程,小生通俗一点的理解为:在一个程序里,我想同时让这个程序完成多个任务. ...

  5. 多线程之线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  6. Java反射获取class对象的三种方式,反射创建对象的两种方式

    Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...

  7. java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程

    用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程 ThreadLocal在我的笔记"关于线程同步"的第5种方式里面有介绍,这里就不多说了. ...

  8. java使用Callable创建又返回值的线程

    并发编程使我们可以将程序分为很多个分离的,相互之间独立的任务,通过使用多线程的机制,将每个任务都会有一个执行线程来单独的驱动,一个线程是 进程中一个单一顺序控制流,一个进程可以拥有多个线程,也就相当于 ...

  9. Java线程:新特征-有返回值的线程

    http://lavasoft.blog.51cto.com/62575/222082/ Java线程:新特征-有返回值的线程 2009-11-04 17:33:56 标签:返回值 职场 线程 休闲 ...

  10. Java中使用有返回值的线程

    在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable,可以获取线程中的返回值,但是获取线程的返回值的时候,需 ...

随机推荐

  1. 基础篇:Stable Diffusion 基础原理详述

    [基础篇]Stable Diffusion 基础原理详述 前言 我认为学习 ComfyUI 应该先从理论学起. 与传统绘图工具(如 Photoshop 或 Figma)相比,AI 绘图工具有着显著不同 ...

  2. Spring声明事务和分布式事务处理技术

    Spring声明事务的两种方式 方式一.传统的编程式事务管理: 需要手动编写代码在业务层注入事务管理模板(一般不用) 方式二.基于 AOP 技术实现的声明式事务管理: Spring 声明式事务管理在底 ...

  3. 面试官:Dubbo一次RPC请求经历哪些环节?

    大家好,我是三友~~ 今天继续探秘系列,扒一扒一次RPC请求在Dubbo中经历的核心流程. 本文是基于Dubbo3.x版本进行讲解 一个简单的Demo 这里还是老样子,为了保证文章的完整性和连贯性,方 ...

  4. 在Visual Studio Code中,鼠标双击PHP变量的时候,如何选择包括$在内的整个变量名

    依次点击:文件->首选项->设置 并在"editor.wordSeparators"设置中为您的语言指定删除"$"符号:

  5. c++17 using继承所有构造函数

    //使用using继承所有的构造函数 #include "tmp.h" #include <iostream> using namespace std; struct ...

  6. OpenAI深夜丢炸弹硬杠谷歌搜索

    这几年科技变革太快,AI更是飞速发展,作为一名IT老兵,使用过的搜索引擎也是一换再换.这不,刚消停了一段时间的OpenAI又丢出一个炸弹SearchGPT,直接跟谷歌掀桌子了. 1.谷歌搜索的无奈 早 ...

  7. ios证书免费分享

    首先,ios证书能不能分享给别人使用,能否用别人的证书打包呢? 这个问题的答案在技术上是肯定可以的,但是我要解释一下,技术上可以,不代表真的就可以这样做,为什么呢? 首先,假如用别人的苹果开发者账号的 ...

  8. Jmeter函数助手28-urldecode

    urldecode函数用于解码application/x-www-form-urlencoded字符串. String to encode in URL encoded chars:填入applica ...

  9. BCLinux 8.2安装配置图解教程--龙蜥社区国产移动云系统

    社区镜像下载地址:https://openanolis.cn/download 安装参考地址:https://www.osyunwei.com/archives/13017.html 1安装系统 界面 ...

  10. 【Windows】使用Dism++打包系统

    目的: 封装自己装好的操作系统,以便后续系统重装提高效率 纯净原生系统需要自己搭建开发环境,许多系统库也没有添加,费劲 网络下的整合包总是参杂些垃圾广告,不如自己封装一个 思路: 利用VMware虚拟 ...