`

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中,实现多线程主要有以下三种方式: 1. **继承Thread类**: 当一个类继承了`Thread`类,那么这个类就是一个线程类。你需要重写`Thread`类的`run()`方法,将线程执行的代码放入`run()`方法内。例如,`...

    Java多线程问题总结.doc

    创建Java线程主要有两种方式:继承`Thread`类或实现`Runnable`接口。通常推荐实现`Runnable`接口,因为它更加灵活,降低了类之间的耦合,并遵循面向接口编程的设计原则。 启动线程的关键在于调用`start()`方法,这...

    java面试宝典

    75、socket通信(tcp/udp区别及JAVA的实现方式) 18 76、什么是java序列化,如何实现java序列化? 18 77、简述synchronized和java.util.concurrent.locks.Lock的异同 ? 18 78、abstract class Name { private ...

    java面试题

    51.5. java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 25 52. 数据连接池 25 52.1. 连接池的基本原理: 25 52.2. 连接池的工作机制 25 52.3. 建立连接池 26 ...

    Java面试宝典-经典

    46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明...

    java面试题大全(2012版)

    46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明...

    最新Java面试宝典pdf版

    46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明...

    java面试大全

    java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用?** - 实现线程的方式有两种:继承`Thread`类或实现`Runnable`接口。 - 同步方法使用`synchronized`关键字修饰...

    java面试宝典2012

    46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 32 47、sleep() 和 wait() 有什么区别? 33 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明...

    Java面试宝典2012版

    46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在什么情况下分别使用他们?举例...

    Java面试宝典2012新版

    46、java中有几种方法可以实现一个线程?用什么关键字修饰同步方法? stop()和suspend()方法为何不推荐使用? 29 47、sleep() 和 wait() 有什么区别? 30 48、同步和异步有何异同,在什么情况下分别使用他们?举例说明...

    java threadpool

    8. **Future和Callable接口**:`Future`接口代表异步计算的结果,`Callable`接口用于定义带有返回值的任务。通过`ExecutorService.submit(Callable&lt;T&gt; task)`可以将`Callable`任务提交到线程池,并返回一个`Future`...

    java 并发编程

    Future通常与Callable一起使用,后者是一个带有返回值并且可以抛出异常的任务接口。这与Runnable接口形成对比,后者没有返回值且不能抛出检查型异常。 总而言之,Java并发编程涉及了多线程的创建、管理、同步和协作...

    Java面试宝典2012版.pdf

    java中有几种方法可以实现一个线程?用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用? - 实现线程的两种方式:继承`Thread`类或实现`Runnable`接口。 - 同步方法可以使用`synchronized`关键字来...

    java_jvm.zip_java

    4. Java虚拟机栈(JVM Stack):每个线程都有一个独立的虚拟机栈,用于存储局部变量、方法返回值和方法调用信息。 5. 本地方法栈(Native Method Stack):与JVM栈类似,但用于支持本地方法(用C++或其他语言实现的...

    java并发编程实践

    6. **Future和Callable**:Future接口代表异步计算的结果,Callable接口用于表示带有返回值的计算任务。它们与ExecutorService结合使用,可以实现更灵活的异步编程模型。 7. **并发容器**:Java并发包提供了如...

    linux 下线程库的使用

    在Linux环境下,主要的线程库有以下几种: 1. **NPTL (Native POSIX Thread Library)**:这是Linux内核自带的标准线程实现,遵循POSIX线程规范(pthread)。NPTL提供了一套完整的API,包括线程创建、同步、销毁等...

Global site tag (gtag.js) - Google Analytics