Java开启新线程并传参方法代码实现

下面是讲解“Java开启新线程并传参方法代码实现”的完整攻略:

内容概述

  • 基本概念介绍
  • 传统开启线程方式
  • Java 8 Lambda表达式实现开启线程
  • Java 8 方法引用实现开启线程

基本概念介绍

在线程编程中,有两种常见的线程启动方式:

  1. 继承Thread类,重写run方法,调用start方法启动线程。
  2. 实现Runnable接口,将Runnable实现类的实例作为Thread的构造参数,调用start方法启动线程。

而在开启新线程时需要给线程传递参数时,一般常见的做法有两种:

  1. 将参数封装在自定义的类中,在线程启动时将该类的实例作为线程构造函数的参数传入。
  2. 使用Java 8中的Lambda表达式或方法引用,将需要执行的代码块作为参数传入。

传统开启线程方式

以下是基于Thread类和Runnable接口的传统线程开启方式中的示例代码:

class MyRunnable implements Runnable {
    private int num;
    public MyRunnable(int num){
        this.num = num;
    }

    @Override
    public void run() {
        System.out.println("传统方式创建线程Runnable参数:" + this.num);
    }
}

class MyThread extends Thread {
    private int num;
    public MyThread(int num){
        this.num = num;
    }

    @Override
    public void run() {
        System.out.println("传统方式创建线程Thread参数:" + this.num);
    }
}

public class Main {
    public static void main(String[] args) {
        Thread t1 = new MyThread(111);
        t1.start();

        Runnable r1 = new MyRunnable(222);
        Thread t2 = new Thread(r1);
        t2.start();
    }
}

从上面的代码可以看出,每个线程需要传递的参数都需要在MyRunnable和MyThread内部进行定义和传递。如果需要传递多个参数,则需要定义多个变量,在实现代码中进行传递。

Java 8 Lambda表达式实现开启线程

接下来,我们看一下Java 8中通过Lambda表达式实现开启线程,代码如下:

public class Main {
    public static void main(String[] args) {
        // lambda表达式方式创建线程
        new Thread(() -> {
            System.out.println("Lambda方式创建线程无参数");
        }).start();

        int num = 333;
        new Thread(() -> {
            System.out.println("Lambda方式创建线程参数:" + num);
        }).start();
    }
}

通过Lambda表达式方式创建线程时,无需为线程的构造函数传入任何参数。代码简单清晰,直接对需要执行的代码块进行传递即可。如果需要使用到外部变量,则需要将变量定义为final或effectively final,也就是变量的值在代码块中不会发生改变。如示例代码中的num变量。

Java 8方法引用实现开启线程

除了使用Lambda表达式来创建线程之外,我们还可以使用Java 8的方法引用来创建线程。示例代码如下:

public class Main {
    public static void main(String[] args) {
        // 方法引用方式创建线程
        new Thread(Main::runnable).start();

        int num = 444;
        new Thread(() -> Main.runnableParam(num)).start();
    }

    public static void runnable() {
        System.out.println("方法引用方式创建线程无参数");
    }

    public static void runnableParam(int num) {
        System.out.println("方法引用方式创建线程参数:" + num);
    }
}

方法引用方式可以选择一个已存在的方法作为线程执行代码块,并将其作为参数传递给Thread实例的构造方法。也可像Lambda表达式那样使用箭头“->”,将需要执行的方法进行传递。在方法引用中,可以直接将该类中已存在的静态方法或实例方法名作为参数进行传递,不需要进行任何的重写和复制操作。

总结

  • Java开启新线程的传统实现方式是基于Thread类和Runnable接口的。
  • 使用Lambda表达式和方法引用可以简化线程启动代码,提高代码可读性。
  • 在线程启动时需要传递参数时,可以将参数封装在自定义的类中,或者使用Lambda表达式或方法引用直接将需要执行的代码块进行传递,避免了在实现代码中进行传递的麻烦。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java开启新线程并传参方法代码实现 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 什么是软引用?

    软引用是一个在Java中用于动态管理内存的概念。它是一种弱化的引用,被设计成用于指向那些后备缓存数据的对象。Java垃圾回收器通常会尽可能长的保留软引用指向的对象,但当系统内存不足时,垃圾回收器会自动释放这些软引用指向的对象。 常见的使用场景包括图片缓存、数据库缓存等,使用软引用可以更灵活地管理缓存数据,同时也可以防止OOM(Out of Memory)错误…

    Java 2023年5月10日
    00
  • SpringBoot如何实现starter原理详解

    下面是对“SpringBoot如何实现starter原理详解”的详细讲解: 什么是starter 在Spring Boot中,starter是一种基于依赖项的,提供了与特定目标功能相关的,预配置的Spring配置的实现方式。它为应用程序的开发者提供了一种快速启动他们的应用程序所需的依赖项和配置的方法。 在常见的web应用程序中,启动应用程序需要一定程度的常规…

    Java 2023年5月15日
    00
  • Springboot内置的工具类之CollectionUtils示例讲解

    下面是讲解Spring Boot内置的工具类之CollectionUtils的攻略: 什么是CollectionUtils? CollectionUtils是Spring框架中的一个实用工具类,提供了一些针对Collection和Map的常用操作方法,可以大大简化数据集合的操作。 CollectionUtils主要方法 addAll(Collection&l…

    Java 2023年5月31日
    00
  • 解决VS2015中没有报表项(ReportViewer)的方法

    解决VS2015中没有报表项(ReportViewer)的方法 在VS2015中创建WinForm项目时,默认情况下是没有报表项(ReportViewer)的,那么该如何解决呢?下面提供两种解决方法。 方法一:通过VS2015安装程序安装报表项(ReportViewer) 打开VS2015安装程序,在“个性化”页面中选择“修改”。 在“工作负载”选项中,勾选…

    Java 2023年6月15日
    00
  • Java异常学习之自定义异常详解

    Java异常学习之自定义异常详解 自定义异常是什么? 在Java的异常体系中,自定义异常指的是用户自己定义的异常类,继承自Throwable或其子类。自定义异常一般用来处理应用程序特别的异常,例如业务逻辑中的特定条件。 如何定义自定义异常? 定义自定义异常需要遵循以下步骤: 创建一个继承自Exception或其子类的Java类; 添加至少一个构造函数,以便在…

    Java 2023年5月27日
    00
  • Springboot从配置文件properties读取字符串乱码的解决

    以下是 Spring Boot 从配置文件 properties 读取字符串乱码的解决攻略。 问题描述 当我们在 Spring Boot 的配置文件(application.properties 或 application.yml)中引用带有特殊字符的字符串时,这些字符串可能会出现乱码。例如,我们在配置文件中配置数据库的连接字符串,但是其中包含中文字符,那么…

    Java 2023年5月20日
    00
  • Spring MVC 前端控制器 (DispatcherServlet)处理流程解析

    Spring MVC 前端控制器 (DispatcherServlet)处理流程解析 前端控制器 (DispatcherServlet) 简介 Spring MVC是一个基于MVC架构的Web框架,它的核心是前端控制器 (DispatcherServlet)。前端控制器是一个Servlet,它是整个Spring MVC框架的核心,负责接收所有的请求,并将请求…

    Java 2023年5月17日
    00
  • springMVC返回复杂的json格式数据方法

    为了返回复杂的json格式数据,我们可以在SpringMVC中使用Jackson库的ObjectMapper类,将java对象序列化为json字符串。下面是SpringMVC返回复杂的json格式数据的步骤。 1. 添加Jackson库依赖 在pom.xml文件中添加Jackson库的依赖。 <dependency> <groupId&gt…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部