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

发布时间:2020-05-22 11:20:08

来源:亿速云

阅读:238

作者:Leah

Java有几种方法开启线程?怎么实现带有返回值的线程?这些问题可能是我们日常工作会见到的。通过这些问题,希望你能收获更多。下面是揭开这些问题的详细内容。

一:无返回值类型的

1:继承Thread类

2:实现Runnable接口

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

1:继承Thread类的写法

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

编辑

2:实现Runnable接口的写法:

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

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

编辑

二:带有返回值的

3:实现Callable接口

操作步骤:

一个类实现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开启线程的方法_Java有几种方法开启线程?怎么实现带有返回值的线程?相关推荐

  1. java持久层用文件_JAVA中用三种方法将字符串持久化到文件中

    经常需要将数据进行持久化,而我们的文件系统是最古老也是最可靠的保存方式.这里就给出一个在JAVA中把字符串保存到文件中的例子.如下: package test.base; import java.io ...

  2. java函数定义的要素_Java学习笔记八(方法)

    方法是解决一类问题的有序步骤的集合.将程序中共有的代码放在一起,然后统一调用这一个代码,那么这个代码块则称为方法. 方法尽可能要独立,一个方法最好只解决一个问题. 1.方法的优点 <1>减 ...

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

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

  4. java 多线程 返回值_JAVA多线程实现和应用总结:如何使用有返回值的多线程

    最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结. 1.JAVA多线程实现方式 JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用E ...

  5. Java多线程:多线程同步安全问题的 “三“ 种处理方式 ||多线程 ”死锁“ 的避免 || 单例模式”懒汉式“的线程同步安全问题

    Java多线程:多线程同步安全问题的 "三" 种处理方式 ||多线程 "死锁" 的避免 || 单例模式"懒汉式"的线程同步安全问题 每博一文 ...

  6. Java构造和解析Json数据的两种方法详解一

    在www.json.org上公布了很多JAVA下的json构造和解析工具,其中org.json和json-lib比较简单,两者使用上差不多但还是有些区别.下面首先介绍用json-lib构造和解析Jso ...

  7. Java 判断字符串是否为空的四种方法、优缺点与注意事项

    以下是Java 判断字符串是否为空的四种方法: 方法一: 最多人使用的一个方法, 直观, 方便, 但效率很低: if(s == null ||"".equals(s)); 方法二: ...

  8. Java线程详解(12)-有返回值的线程

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

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

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

最新文章

  1. 1.Hello,World all the time
  2. thinkphp5 mysql uuid_TP6_基类控制器如何向中间件传参
  3. 对没有标记为安全的activex控件进行初始化和脚本运行_新的C++安全编码规则出炉...
  4. Bug之Yii继承类的
  5. python 类的内置方法_Python 类的常用内置方法
  6. a标签传值到另一个页面_前端开发入门——HTML基础标签
  7. pytorch 训练过程acc_Pytorch之Softmax多分类任务
  8. C++继承和组合——带你读懂接口和mixin,实现多功能自由组合
  9. 迁移学习:迈向真正的人工智能
  10. NLP硬核入门-Seq2Seq和Attention机制
  11. django数据库错误相关问题
  12. vue手机端回退_vue移动端弹框组件 - osc_eiolhkks的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. java编写一个方法printn_Java语言程序设计 基础篇 原书第10版 ,梁勇著 (第六章)编程练习题...
  14. ios android 通用字体,教你如何在iOS项目中设置各种字体
  15. 【知识科普】嵌入式软件开发是什么?
  16. latex中插入eps图片方法与遇到xdvipdfmx:fatal: Image inclusion failed for XXX的错误
  17. 在线vim配色加term与gui统一颜色调整python脚本
  18. AMD显卡怎么提高帧数?AMD显卡提高fps的方法
  19. Matlab小实例(一)
  20. “重塑”—— 与ISV同行

热门文章

  1. Xamarin+vs2010部署错误:error MSB6004: 指定的任务可执行文件位置\sdk\\tools\zipalign.exe”无效...
  2. ThinkPHP函数详解:M方法
  3. 超棒的微软Metro风格Logo设计
  4. windows2003中mssql连接的NT AUTHORITY\NETWORK SERVICE登录失败的问题
  5. 122网络各层中的设备是什么以及工作原理
  6. 世界人工智能大会圆桌实录:AI与产业融合创新的挑战与机遇
  7. http、TCP/IP协议与socket之间的区别
  8. java atomicfloat_Java:有没有AtomicFloat或AtomicDouble?
  9. 015_SpringBoot视图层技术thymeleaf-URL表达式
  10. 019_MySQL正则表达式