Java都有哪些创建线程的方法

目录
  • 1.继承Thread类
    • 1.1 普通类继承Thread
    • 1.2 匿名内部类
    • 1.3 缺点分析
  • 2.实现Runnable接口
    • 2.1 普通类实现Runnable
    • 2.2 匿名Runnable实现类
    • 2.3 Lambda创建Runnable
    • 2.4 缺点分析
  • 3.使用Callable接口
    • 3.1 普通类实现Callable
    • 3.2 匿名Callable实现类
  • 总结

在 Java 中,线程的创建方法有 7 种,分为以下 3 大类:

  • 继承 Thread 类的方式,它有 2 种实现方法。
  • 实现 Runnable 接口的方式,它有 3 种实现方法。
  • 实现 Callable 接口的方式,它有 2 种实现方法。

1.继承Thread类

继承 Thread 类并重写 run 方法,是最早期创建线程的方法,它的实现方法有以下两种:

  • 创建一个普通的类,继承 Thread 类,并重写 run 方法。
  • 使用匿名内部类的方式继承并重写 run 方法。

具体实现如下。

1.1 普通类继承Thread

创建一个普通类,继承 Thread 并重写 run 方法,其中 run 方法中的代码是线程具体要执行的业务代码,实现如下:

// 自定义一个类继承 Thread 并重写 run 方法
class MyThread extends Thread {
    @Override
    public void run() {
        // 添加业务方法...
    }
}
// 创建线程并执行
public class ThreadExample {
    public static void main(String[] args) {
        // 创建线程
        Thread thread = new MyThread();
        // 启动线程
        thread.start();
    }
}

1.2 匿名内部类

上面的写法有点繁琐,我们还可以使用以下匿名类的方式来实现:

// 匿名方式创建线程
Thread t1 = new Thread() {
    @Override
    public void run() {
        // 添加业务方法...
    }
};
// 启动线程
t1.start();

1.3 缺点分析

继承 Thread 类的实现方法有一个明显的缺点,Java 语言是单继承的,所以如果继承了 Thread 类,那就不能再继承其他类了。

2.实现Runnable接口

在 Java 语言中,虽然不能多继承,但可以实现多个接口。接下来是实现 Runnable 接口的 3 种方法:

  • 创建一个普通类实现 Runnable 接口,并重写 run 方法。
  • 使用匿名方式创建 Runnable 实现类,并重写 run 方法。
  • 使用 Lambda 方式创建匿名 Runnable 实现类(JDK 8+)。

2.1 普通类实现Runnable

// 定义一个普通类实现 Runnable 接口
class MyRunnable implements Runnable {
    @Override
    public void run() {
        // 添加业务方法...
    }
}
// 线程创建
public static void main(String[] args) {
    // 创建一个 Runnable 实现类
    MyRunnable myRunnable = new MyRunnable();
    // 创建线程
    Thread thread = new Thread(myRunnable);
    // 启动线程
    thread.start();
}

2.2 匿名Runnable实现类

// 匿名 Runnable 实现类
Thread t2 = new Thread(new Runnable() {
    @Override
    public void run() {
        // 添加业务方法...
    }
});
// 启动线程
t2.start();

2.3 Lambda创建Runnable

在 JDK 8 之后(包含 JDK 8),我们可以使用 Lambda 表达式来创建线程,如下代码所示:

// 使用 Lambda 匿名 Runnable 方式
Thread t3 = new Thread(() -> {
    // 添加业务方法...
});
// 启动线程
t3.start();

从上述代码可以看出,如果是 JDK 1.8 以上的程序,在不要求获得线程执行结果的情况下,推荐使用 Lambda 的方式来创建线程,因为它的写法足够简洁

2.4 缺点分析

以上创建线程的方法,都有一个通用的问题:那就是不能获得线程的执行结果。

3.使用Callable接口

JDK 1.5 中推出的 Callable 接口,解决了之前不能获得线程执行结果的尴尬它的实现方法有以下两种:

  • 创建一个普通类实现 Callable 接口,并重写 call 方法。
  • 使用匿名内部类创建 Callable 的实现类,并重写 call 方法。

3.1 普通类实现Callable

// 定义普通实现 Callable 接口,返回一个 Integer 类型的结果(当然也可以返回其他类型的结果)
class MyCallable implements Callable<Integer> {
    @Override
    public Integer call() throws Exception {
        // 业务实现代码...
        return 0;
    }
}
// 创建线程
public static void main(String[] args) throws ExecutionException, InterruptedException {
    // 创建 Callable 普通类
    MyCallable callable = new MyCallable();
    // 使用 FutureTask 用于获取线程执行结果
    FutureTask<Integer> futureTask = new FutureTask<>(callable);
    // 创建线程
    Thread thread = new Thread(futureTask);
    // 启动线程
    thread.start();
    // 得到线程执行的结果
    int result = futureTask.get();
}

以上代码使用 FutureTask + Callable 的方式获取线程的执行结果,它可以接受任何类型的返回值,我们只需要在创建 Callable 实现类的时候,定义返回的数据类型即可。

3.2 匿名Callable实现类

// FutureTask 用于获取线程执行结果
FutureTask<Integer> futureTask = new FutureTask<>(new Callable<Integer>() {
    @Override
    public Integer call() throws Exception {
        // 业务代码...
        return 0;
    }
});
// 创建线程
Thread thread = new Thread(futureTask);
// 启动线程
thread.start();
// 得到线程执行的结果
int result = futureTask.get();

总结

在 Java 语言中,创建线程有 3 大类实现方式、7 种实现方法,如果是 JDK 1.8 以上版本,在不需要获得线程执行结果的情况下,推荐使用 Lambda 方式来创建线程,因为它的写法足够简洁;如果想要获取线程执行结果,可使用 FutureTask + Callable 的方式来实现。​

到此这篇关于Java都有哪些创建线程的方法的文章就介绍到这了,更多相关Java创建线程内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • java线程之用Thread类创建线程的方法

    在Java中创建线程有两种方法:使用Thread类和使用Runnable接口.在使用Runnable接口时需要建立一个Thread实例.因此,无论是通过Thread类还是Runnable接口建立线程,都必须建立Thread类或它的子类的实例.Thread类的构造方法被重载了八次,构造方法如下: 复制代码 代码如下: public Thread( ); public Thread(Runnable target); public Thread(String name); public Thread

  • Java创建子线程的两种方法

    摘要: 其实两种方法归结起来看还是一种,都是利用Thread的构造器进行创建,区别就是一种是无参的,一种是有参的. 一.继承Thread线程类: 通过继承Thread类,重写run方法,子类对象就可以调用start方法启动线程,JVM就会调用此线程的run方法. 代码如下: public class MyThread extends Thread { public MyThread() { super(); } @Override public void run() { } // 线程执行结束

  • Java创建并运行线程的方法

    Java线程类也是一个object类,它的实例都继承自java.lang.Thread或其子类. 可以用如下方式用java中创建一个线程: Tread thread = new Thread(); 执行该线程可以调用该线程的start()方法: thread.start(); 在上面的例子中,我们并没有为线程编写运行代码,因此调用该方法后线程就终止了. 编写线程运行时执行的代码有两种方式:一种是创建Thread子类的一个实例并重写run方法,第二种是创建类的时候实现Runnable接口.接下来我

  • java线程之使用Runnable接口创建线程的方法

    实现Runnable接口的类必须使用Thread类的实例才能创建线程.通过Runnable接口创建线程分为两步: 1. 将实现Runnable接口的类实例化. 2. 建立一个Thread对象,并将第一步实例化后的对象作为参数传入Thread类的构造方法. 最后通过Thread类的start方法建立线程. 下面的代码演示了如何使用Runnable接口来创建线程: 复制代码 代码如下: package mythread; public class MyRunnable implements Runn

  • Java 创建线程的3种方法及各自的优点

    1. 继承 Thread 类,然后调用 start 方法. class MyThread extends Thread { //重写run方法,线程运行后,跑的就是run方法 public void run(){ //System.out.println(""); } public static void main(String[] args){ Thread t1 = new MyThread(); t1.start(); //线程运行,调用的 run()方法. } } 2. 实现

  • java创建线程的两种方法区别

    在Java中创建一个线程有两种方法:继承Thread类和实现Runnable接口. 下面通过两个例子来分析两者的区别: 1)继承Thread类 public class TestThread extends Thread { int count = 3; public TestThread(String ThreadName) { super(ThreadName); } @Override public void run() { for (int i = 0; i < 10; i++) if

  • Java多线程——之一创建线程的四种方法

    1.实现Runnable接口,重载run(),无返回值 package thread; public class ThreadRunnable implements Runnable { public void run() { for (int i = 0; i < 10; i++) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } package thread; public clas

  • Java都有哪些创建线程的方法

    目录 1.继承Thread类 1.1 普通类继承Thread 1.2 匿名内部类 1.3 缺点分析 2.实现Runnable接口 2.1 普通类实现Runnable 2.2 匿名Runnable实现类 2.3 Lambda创建Runnable 2.4 缺点分析 3.使用Callable接口 3.1 普通类实现Callable 3.2 匿名Callable实现类 总结 在 Java 中,线程的创建方法有 7 种,分为以下 3 大类: 继承 Thread 类的方式,它有 2 种实现方法. 实现 Ru

  • Java并发编程之创建线程

    先讲述一下Java中的应用程序和进程相关的概念知识,然后再阐述如何创建线程以及如何创建进程.下面是本文的目录大纲: 一.Java中关于应用程序和进程相关的概念 二.Java中如何创建线程 三.Java中如何创建进程 一.Java中关于应用程序和进程相关的概念 在Java中,一个应用程序对应着一个JVM实例(也有地方称为JVM进程),一般来说名字默认为java.exe或者javaw.exe(windows下可以通过任务管理器查看).Java采用的是单线程编程模型,即在我们自己的程序中如果没有主动创

  • Java继承Thread类创建线程类示例

    本文实例讲述了Java继承Thread类创建线程类.分享给大家供大家参考,具体如下: 一 点睛 通过继承Thread类创建线程并启动多线程的步骤: 1 定义Thread的子类,并重写该类的run()方法,该run()方法的方法体代表了线程需要完成的任务.因此run()方法称为线程执行体. 2 创建Thread子类的实例,即创建子线程对象. 3 调用线程对象的start()方法来启动该线程. 二 代码 // 通过继承Thread类来创建线程类 public class FirstThread ex

  • java 创建线程的方法总结

    java 创建线程 Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线程,有两种方法: ◆需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法: ◆实现Runnalbe接口,重载Runnalbe接口中的run()方法. 为什么Java要提供两种方法来创建线程呢?它们都有哪些区别?相比而言,哪一种方法更好呢? 在Java

  • Java在Excel中创建透视表方法解析

    本文内容介绍通过Java程序在Excel表格中根据数据来创建透视表. 环境准备 需要使用Excel类库工具-Free Spire.XLS for Java,这里使用的是免费版,可通过官网下载Jar包并解压,手动导入lib文件夹下的Spire.Xls.jar到Java程序:或者也可以通过Maven仓库下载导入. Java代码示例 import com.spire.xls.*; public class CreatePivotTable { public static void main(Strin

  • java 创建线程的几种方式

    说道线程,肯定会想到使用 java.lang.Thread.java这个类 那么创建线程也主要有2种方式 第一种方式: public class MyThread extends Thread { public void run() { System.out.println("这是MyThread线程"); } } 然后在调用处,执行start方法即可: MyThread myThread = new MyThread(); myThread.start(); 第二种方式实现Runna

  • java实现/创建线程的几种方式小结

    进程与线程 进程可以简单理解成一个可执行程序例如.exe,在Windows中的任务管理器中可以查看每一个进程,进程是一次程序的执行,是程序在数据集合上运行的过程,是系统资源调度的一个单位.进程主要负责向操作系统申请资源.然而一个进程中,多个线程可以共享进程中相同的内存或文件资源.线程就是一个进程一个程序要完成所依赖的子任务,这些子任务便可以看作是一个线程. 第一种方式继承Thread类 从java源码可以看出Thread类本质上实现了Runnable接口的实例类,代表了线程的一个线程的实例,启动

  • 关于Java创建线程的2种方式以及对比

    目录 1. 继承Thread类 2. 实现Runnable接口: 创建线程的两种方式对比: 线程的完整生命周期: 总结 Java中两种创建线程的方式: 1. 继承Thread类 重写run()方法 new一个线程对象 调用对象的start()启动线程 class Handler extends Thread{ public void run(){ //重写run()方法 } public static void main(String[] args){ Thread thread=new Han

随机推荐