iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java中线程的创建方式是什么
  • 253
分享到

Java中线程的创建方式是什么

2023-07-05 09:07:43 253人浏览 安东尼
摘要

本文小编为大家详细介绍“Java中线程的创建方式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中线程的创建方式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一. 继承Thread可以通过创建

本文小编为大家详细介绍“Java中线程的创建方式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中线程的创建方式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

一. 继承Thread

可以通过创建Thread的子类并在子类中重写run() 方法完成线程创建。示例如下所示。

public class ThreadTest {    @Test    public void 继承Thread() throws Exception {        // 创建线程对象        MyThread myThread = new MyThread();        // 启动线程        myThread.start();        // 睡1秒,等待子线程执行完任务        Thread.sleep(1000);    }    private static class MyThread extends Thread {        @Override        public void run() {            System.out.println("线程执行了");        }    }}

运行测试程序,打印如下。

Java中线程的创建方式是什么

其实可以只继承Thread,而不重写run() 方法,此时是不会报错的,只不过调用start() 方法后线程不会执行任何逻辑。示例如下。

public class ThreadTest {    @Test    public void 继承Thread时可以不重写run方法() {        // 创建没有重写run()方法的线程对象        MyThreadNotOverrideRun myThread = new MyThreadNotOverrideRun();        // 启动线程,不报错,执行的是Thread的run()方法,无任何逻辑        myThread.start();    }    private static class MyThreadNotOverrideRun extends Thread {}}

二. 创建Runnable对象

可以通过创建Runnable接口的实现类,然后将Runnable对象作为Thread对象的执行任务,来创建线程。示例如下。

public class ThreadTest {    @Test    public void 基于Runnable() throws Exception {        // 创建Runnable任务对象        Runnable runnable = new Runnable() {            @Override            public void run() {                System.out.println("任务执行");            }        };        // 创建Thread对象时将Runnable任务对象通过构造函数传入        Thread thread = new Thread(runnable);        // 启动线程        thread.start();        // 睡1秒,等待子线程执行完任务        Thread.sleep(1000);    }}

运行测试程序,执行结果如下所示。

Java中线程的创建方式是什么

三. 创建Callable对象

Callable接口也是可以作为任务被线程执行,其与Runnable接口的区别在于Callable任务可以有返回值,而Runnable任务没有返回值。

由于Thread对象只能执行Runnable任务,因此无法直接让Thread执行Callable任务,但是可以先将Callable封装成FutureTask,而FutureTask是实现了Runnable接口的,所以Thread对象可以执行FutureTask任务。示例如下。

public class ThreadTest {    @Test    public void 基于Callable() throws Exception {        // 创建Callable任务对象        Callable<String> callable = new Callable<String>() {            @Override            public String call() throws Exception {                return "任务执行结果";            }        };        // 将Callable封装成FutureTask        FutureTask<String> futureTask = new FutureTask<>(callable);        // 创建Thread对象时将FutureTask通过构造函数传入        Thread thread = new Thread(futureTask);        // 启动线程        thread.start();        // 通过FutureTask拿到执行结果        System.out.println(futureTask.get());    }}

运行测试程序,结果如下。

Java中线程的创建方式是什么

四. 基于Runnable创建FutureTask

在第三小节中是基于Callable来创建的FutureTask,本小节将基于Runnable来创建FutureTask。在此之前,先看一下FutureTask的类图,如下所示。

Java中线程的创建方式是什么

所以FutureTask即能够作为Runnable被执行,也能够作为Future获取异步执行的结果。FutureTask有两个构造函数,签名如下。

// 基于Callable创建FutureTaskpublic FutureTask(Callable<V> callable)// 基于Runnable创建FutureTaskpublic FutureTask(Runnable runnable, V result)

下面重点看一下如何基于Runnable创建FutureTask源码如下所示。

public FutureTask(Runnable runnable, V result) {    // 使用Executors工具类将Runnable封装成Callable    this.callable = Executors.callable(runnable, result);    this.state = NEW;}

继续看Executors#callable(java.lang.Runnable, T) 方法,如下所示。

public static <T> Callable<T> callable(Runnable task, T result) {    if (task == null) {        throw new NullPointerException();    }    // 将Runnable封装成RunnableAdapter    return new RunnableAdapter<T>(task, result);}

那么Executors#callable(java.lang.Runnable, T) 方法中就是将Runnable封装成了RunnableAdapter,最后再看一下RunnableAdapter的实现。

static final class RunnableAdapter<T> implements Callable<T> {    final Runnable task;    final T result;        RunnableAdapter(Runnable task, T result) {        this.task = task;        this.result = result;    }        public T call() {        // 执行Runnable的逻辑        task.run();        // 执行完毕后,result作为结果返回        return result;    }}

所以这里可以知道,基于Runnable创建FutureTask,其本质是将Runnable先封装为Callable,然后再将Callable封装成FutureTask。还有一点需要注意,在基于Runnable创建FutureTask时,除了传入Runnable,还可以传入一个作为返回结果的对象,Runnable执行完毕后,会将这个对象返回,这个对象也可以传一个null,表示不需要返回值。

基于Runnable创建FutureTask的一个示例如下。

public class ThreadTest {    @Test    public void 基于Runnable来构建FutureTask() throws Exception {        // 创建结果对象        MyResult myResult = new MyResult();        // 创建Runnable任务对象        Runnable runnable = new Runnable() {            @Override            public void run() {                myResult.setResult("任务执行");            }        };        // 将Runnable封装成FutureTask        // Runnable执行后,会改变MyResult对象        FutureTask<MyResult> futureTask = new FutureTask<>(runnable, myResult);        // 创建Thread对象时将FutureTask通过构造函数传入        Thread thread = new Thread(futureTask);        // 启动线程        thread.start();        // 通过FutureTask拿到执行结果        System.out.println(futureTask.get().getResult());    }    private static class MyResult {        String result;        public MyResult() {}        public MyResult(String result) {            this.result = result;        }        public String getResult() {            return result;        }        public void setResult(String result) {            this.result = result;        }    }}

运行测试程序,结果如下所示。

Java中线程的创建方式是什么

读到这里,这篇“Java中线程的创建方式是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注编程网精选频道。

--结束END--

本文标题: Java中线程的创建方式是什么

本文链接: https://www.lsjlt.com/news/350835.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java中线程的创建方式是什么
    本文小编为大家详细介绍“Java中线程的创建方式是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java中线程的创建方式是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一. 继承Thread可以通过创建...
    99+
    2023-07-05
  • Linux线程的创建方式是什么
    这篇文章主要介绍“Linux线程的创建方式是什么”,在日常操作中,相信很多人在Linux线程的创建方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Linux线程的创建方式是什么”的疑惑有所帮助!接下来...
    99+
    2023-07-05
  • java线程池创建的方法是什么
    在Java中,线程池可以使用以下两种方法来创建: 使用`Executors`类中的静态方法来创建线程池: ExecutorSer...
    99+
    2023-10-25
    java
  • java创建多线程的方法是什么
    在Java中,有两种常见的方法来创建多线程:1. 继承Thread类:创建一个继承自Thread类的子类,重写run()方法,并在r...
    99+
    2023-08-16
    java
  • Java 中创建线程的几种方式
    Java 是一种面向对象的编程语言,它支持多线程编程。多线程编程是指在一个程序中同时运行多个线程,这些线程可以并行执行,以提高程序的效率和性能。Java 提供了多种创建线程的方法,本文将介绍这些方法以...
    99+
    2023-09-13
    java jvm servlet
  • Java多线程的创建方式
    这篇文章主要介绍“Java多线程的创建方式”,在日常操作中,相信很多人在Java多线程的创建方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java多线程的创建方式”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-20
  • Java线程的三种创建方式
    目录1、Thread2、Runnable和Thread3、Runnable和Thread4、三者对比5、注意项1、Thread 继承Thread类,并重写run方法 class ...
    99+
    2024-04-02
  • Java创建线程的方式解析
    目录继承Thread,这里使用匿名内部类实现Runnable接口,配合Thread类,同样用匿名内部类FutureTask配合Thread继承Thread,这里使用匿名内部类 @Sl...
    99+
    2024-04-02
  • 线程的创建方式
    作者简介: zoro-1,目前大二,正在学习Java,数据结构,mysql,javaee等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 线程的创建...
    99+
    2023-12-23
    android java 开发语言
  • java中线程池创建的方式有哪些
    本篇文章为大家展示了java中线程池创建的方式有哪些,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开...
    99+
    2023-06-14
  • linux线程的创建方法是什么
    在Linux系统中,可以使用pthread库来创建线程。pthread库是一个POSIX线程库,提供了一系列函数来创建、管理和同步线...
    99+
    2023-08-30
    linux
  • java创建线程的方式有哪些
    Java创建线程的方式有以下几种:1. 继承Thread类:定义一个继承自Thread类的子类,重写run()方法来定义线程的执行逻...
    99+
    2023-08-08
    java
  • Java线程的创建方式有哪些
    这篇文章主要讲解了“Java线程的创建方式有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java线程的创建方式有哪些”吧!1、Thread继承Thread类,并重写run方法class...
    99+
    2023-06-21
  • java创建多线程的七种方式
    一、继承Thread,重写run方法 通过自定义一个类(这里起名为:MyThread),继承Thread类,重写run方法,最后在main方法中new出MyThread实例,调用这个实例的继承的Thread类的start方法创建一个线程。 ...
    99+
    2023-09-26
    java
  • java clazz类创建的方式是什么
    在Java中,我们可以使用以下两种方式来创建一个class类:1. 使用关键字class:```public class MyCla...
    99+
    2023-10-11
    java
  • Java中Thread和Runnable创建线程的方式对比
    目录一、通过继承Thread创建线程二、实现Runnable创建检查三、比较两种创建方式3.1、多继承3.2、 数据共享3.3、线程池四、源码分析一、通过继承Thread创建线程 通...
    99+
    2024-04-02
  • Java线程创建的四种方式总结
    多线程的创建,方式一:继承于Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run()--->将此线程执行的操作声明在run()中 3.创建Th...
    99+
    2024-04-02
  • c++创建多线程的方法是什么
    在C++中,有多种方法可以创建多线程。以下是其中几种常见的方法: 使用std::thread类:std::thread类是C++标...
    99+
    2023-10-25
    c++
  • java创建多线程的方式有哪些
    Java创建多线程的方式有以下几种:1. 继承Thread类:创建一个类继承Thread类,并重写run()方法,然后创建该类的对象,调用start()方法启动线程。```javaclass MyThread extends Threa...
    99+
    2023-08-09
    java
  • Java匿名内部类创建线程的方法是什么
    在Java中,可以使用匿名内部类创建线程的方法是通过继承Thread类或实现Runnable接口。1. 继承Thread类:```T...
    99+
    2023-09-11
    Java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作