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以及线程池
Java 实现线程的方式有几种方式?带有返回值的线程怎么实现?的更多相关文章
- Java线程中带有返回值的线程Callable
在Java5之前,线程是没有返回值的,常常为了“有”返回值,破费周折,而且代码很不好写.或者干脆绕过这道坎,走别的路了.现在Java终于有可返回值的任务(也可以叫做线程)了. 可返回值的任务必须实现C ...
- Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- 【java多线程】多线程的创建三种方式--笔记
申明:线程的概念以及进程的相关概念,可以参考网络上其他资料,这里只讨论多线程是怎么实现. 一.多线程的简单理解 明白什么是多线程,小生通俗一点的理解为:在一个程序里,我想同时让这个程序完成多个任务. ...
- 多线程之线程间协作的两种方式:wait、notify、notifyAll和Condition
Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...
- Java反射获取class对象的三种方式,反射创建对象的两种方式
Java反射获取class对象的三种方式,反射创建对象的两种方式 1.获取Class对象 在 Java API 中,提供了获取 Class 类对象的三种方法: 第一种,使用 Class.forName ...
- java笔记--用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程
用ThreadLocal管理线程,Callable<V>接口实现有返回值的线程 ThreadLocal在我的笔记"关于线程同步"的第5种方式里面有介绍,这里就不多说了. ...
- java使用Callable创建又返回值的线程
并发编程使我们可以将程序分为很多个分离的,相互之间独立的任务,通过使用多线程的机制,将每个任务都会有一个执行线程来单独的驱动,一个线程是 进程中一个单一顺序控制流,一个进程可以拥有多个线程,也就相当于 ...
- Java线程:新特征-有返回值的线程
http://lavasoft.blog.51cto.com/62575/222082/ Java线程:新特征-有返回值的线程 2009-11-04 17:33:56 标签:返回值 职场 线程 休闲 ...
- Java中使用有返回值的线程
在创建多线程程序的时候,我们常实现Runnable接口,Runnable没有返回值,要想获得返回值,Java5提供了一个新的接口Callable,可以获取线程中的返回值,但是获取线程的返回值的时候,需 ...
随机推荐
- yb课堂实战之轮播图接口引入本地缓存 《二十一》
轮播图接口引入缓存 CacheKeyManager.java package net.ybclass.online_ybclass.config; /** * 缓存key管理类 */ public c ...
- 阅读翻译Prompting Engineering Guides之Introduction(提示工程简介)
阅读翻译Prompting Engineering Guides之Introduction(提示工程简介) 关于 首次发表日期:2024-07-19 Prompting Engineering Gui ...
- SUM-ACM天梯赛
第一次天梯赛: B-B:孵化小鸡 题解:二进制枚举所有可能性,一个一个枚举出来,@离散数学,真值表. 题目如下: 二进制枚举代码如下 点击查看代码 #include <bits/stdc++.h ...
- vscode 调试 nodejs 程序
nodejs 服务在vscode 中的调试 1.安装vscode 略(这不用说了吧) 2.写一个能跑的nodejs 程序 其实看到这个,自己已经有一个能跑的nodejs 程序,不用看我的了 我这里是我 ...
- mp实现一个自连接查询
起因是我设置了一个考核表结构,其中包含指标值,指标当前值,是主副指标等列. 后面我要进行考核的验收的时候,我发现验收要取得的是主当前指标值/主指标值以及副指标当前值/副指标值.如果想要让这两条数据一次 ...
- Jmeter汉化成中文版
1.jmeter安装成功后,默认启动是英文版 2.汉化方法 到jmeter安装目录下找到\bin\jmeter.properties,右键记事本打开定位"#language=en" ...
- 对比python学julia(第一章)--(第二节)似曾相识燕归来
Julia和python一样,都是跨平台开源语言,而且都是动态语言,所以毫无疑问,需要运行时支撑.很简单,到官网去下载julia(https://julialang.org/downloads/).和 ...
- 3、Git之常用命令
3.1.速查表 命令 作用 git config --global user.name 用户名 设置用户签名(昵称) git config --global user.email 邮箱 设置用户签名( ...
- NVIDIA 2024 GTC大会提出的数字孪生技术 —— 工厂3D仿真与AI大模型结合
地址: https://www.youtube.com/watch?v=JQdyzQdMRS0 Fusing Real-Time AI With Digital Twins 使用NVIDIA的3D仿真 ...
- model.train方法的dataset_sink_mode参数设置为False时以step作为单位打印数据——(只在mode=context.GRAPH_MODE下成立,在mode=context.PYNATIVE_MODE模式下不成立)
如题: 官方中的内容支持: https://www.mindspore.cn/tutorial/training/zh-CN/r1.2/advanced_use/summary_record.html ...