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日

相关文章

  • asp.net getRemoteAddr()与 getRemoteHost()的区别

    为了更好地理解getRemoteAddr()和getRemoteHost()这两个方法的区别,我们需要先了解一下HTTP协议和网络协议。HTTP协议是一种基于网络协议的高级应用层协议,它定义了浏览器和Web服务器之间传输数据的格式和方式。网络协议则是计算机之间通信的规则和标准,它涵盖了物理层、数据链路层、网络层等各种层次。在浏览器和Web服务器之间传输数据时…

    Java 2023年6月15日
    00
  • C#中Request.Cookies 和 Response.Cookies 的区别分析

    下面是详细的攻略: Request.Cookies 和 Response.Cookies 的区别分析 在C#中,Request.Cookies和Response.Cookies都是用来操作HttpCookie的。但它们分别代表了不同的Http上下文,有着不同的作用。下面我们详细分析一下它们的区别。 Request.Cookies Request.Cookie…

    Java 2023年6月15日
    00
  • SpringMVC RESTFul实战案例删除功能实现

    SpringMVC RESTFul实战案例删除功能实现 在 SpringMVC 中,RESTful API 是一种常见的 Web 应用程序开发方式。在 RESTful API 中,HTTP 方法(GET、POST、PUT、DELETE 等)表示对资源的操作,URI 表示资源的位置。本文将详细讲解 SpringMVC RESTFul 实战案例删除功能实现,包括…

    Java 2023年5月18日
    00
  • Java实现读取TXT和CSV文件内容

    我将为您详细讲解如何使用Java实现读取TXT和CSV文件内容。 读取TXT文件内容 首先,我们需要使用Java的IO流读取文件内容。以下是一些实现的基本步骤: 创建File类实例,指定要读取的txt文件路径; 创建FileReader实例,参数为所创建File类实例; 创建BufferedReader实例,参数为所创建FileReader实例; 使用Buf…

    Java 2023年5月19日
    00
  • uniapp中input聚焦禁止软键盘弹出方法

    想要禁用软键盘在输入框聚焦后自动弹出并且禁用输入,可以在uniapp中使用以下两种方法: 方法一:使用禁止聚焦的input组件 使用禁止聚焦的input组件能够轻松实现禁止软键盘弹出。在uniapp中,可以通过设置input组件的readonly属性,将其设置为只读模式来达到阻止聚焦和禁用输入的目的。 示例代码如下: <template> &lt…

    Java 2023年5月23日
    00
  • 分析jackjson的安全漏洞CVE-2019-14379

    分析Jackjson的安全漏洞CVE-2019-14379可以通过以下几个步骤: 1.了解CVE-2019-14379漏洞的背景和影响 CVE-2019-14379是一个由Jackson-databind 库的反序列化漏洞引发的安全问题。这种漏洞可以让攻击者远程执行任意代码,从而导致服务器遭到攻击、数据丢失或泄露。 2.检查自己的应用程序是否受到漏洞的影响 …

    Java 2023年5月26日
    00
  • 面向对象编程依赖注入详解

    面向对象编程依赖注入详解 什么是依赖注入 依赖注入(Dependency Injection,简称DI)是一种在面向对象编程中,将类间依赖关系的创建和管理权交给其他专门的类来处理的技术。通俗的说,就是让调用类摆脱创建和管理被调用类对象的束缚,将创建和管理依赖对象的工作交给容器来完成。 DI的优点 降低了系统模块间的耦合度。 可以提高模块的可重用性、可测试性和…

    Java 2023年5月26日
    00
  • 三分钟快速掌握Java中枚举(enum)

    下面是我对“三分钟快速掌握Java中枚举(enum)”的完整攻略。 简介 在Java编程中,枚举(enum)是一种特殊的数据类型,用于列举一组常量值。使用枚举可以将常量值分类并赋予更有意义的名称。通过这种方式,我们可以在代码中清晰地表达我们的意图,避免硬编码和潜在的错误。 创建枚举类型 在Java中,创建枚举类型非常简单。可以通过在类的顶部声明一个enum类…

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