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

下面是讲解“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开启新线程并传参方法代码实现

基础教程推荐