zoukankan      html  css  js  c++  java
  • 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以及线程池

  • 相关阅读:
    Codeforces 1316B String Modification
    Codeforces 1305C Kuroni and Impossible Calculation
    Codeforces 1305B Kuroni and Simple Strings
    Codeforces 1321D Navigation System
    Codeforces 1321C Remove Adjacent
    Codeforces 1321B Journey Planning
    Operating systems Chapter 6
    Operating systems Chapter 5
    Abandoned country HDU
    Computer HDU
  • 原文地址:https://www.cnblogs.com/kaigejava/p/12462485.html
Copyright © 2011-2022 走看看