在 Java 中启动一个新线程

Mohammad Irfan 2023年1月30日 2021年11月18日
  1. 在 Java 中通过扩展 Thread 类来创建线程
  2. 在 Java 中通过实现 Runnable 接口来创建线程
  3. 在 Java 中通过 Thread 对象创建线程
  4. 使用 Java 中的匿名类创建线程
  5. 使用 Java 中的 lambda 函数创建线程
  6. 使用 Java 中的 Executors 类创建线程
在 Java 中启动一个新线程

本教程介绍如何在 Java 中启动新线程。

线程是实时执行并最大化 CPU 利用率的程序/进程的最小单元。

Java 支持线程概念并允许创建线程来创建多线程应用程序。在本文中,我们将学习在 Java 中创建一个新线程。

要在 Java 中创建新线程,我们可以使用 Thread 类或 Runnable 接口。让我们看一些例子。

在 Java 中通过扩展 Thread 类来创建线程

在 Java 中,Thread 是一个用于创建新线程的类,并提供了多种实用方法。在这个例子中,我们通过扩展它来使用 Thread 类,然后使用 start() 方法开始。start() 方法启动一个新线程。run() 方法用于由新创建的线程执行任务。线程自动运行此方法。请参阅下面的示例。

public class SimpleTesting extends Thread{
    public static void main(String[] args){
        SimpleTesting st = new SimpleTesting();
        st.start();
    }
    public void run() {
        try {
            System.out.println("New Thread Start");
            Thread.sleep(1000);
            System.out.println("Thread sleep for 1 second.");
        } catch(InterruptedException e) {
            System.out.println(e);
        }
    } 
}

输出:

New Thread Start
Thread sleep for 1 second.

在 Java 中通过实现 Runnable 接口来创建线程

Runnable 接口可用于创建新线程,但它不提供 Thread 类提供的功能。该接口提供了一个可用于执行任务的 run() 方法。请参阅下面的示例。

public class SimpleTesting implements Runnable{
    public static void main(String[] args){
        SimpleTesting st = new SimpleTesting();
        Thread one = new Thread(st);
        one.start();
    }
    public void run() {
        try {
            System.out.println("New Thread Start");
            Thread.sleep(1000);
            System.out.println("Thread sleep for 1 second.");
        } catch(InterruptedException e) {
            System.out.println(e);
        }
    } 
}

输出:

New Thread Start
Thread sleep for 1 second.

在 Java 中通过 Thread 对象创建线程

我们可以使用 Thread 对象和 start() 方法直接创建一个新线程,但该线程不执行任何任务,因为我们没有提供 run() 方法实现。我们可以通过使用其内置方法如 getState()getName() 等来获取线程信息。请参见下面的示例。

public class SimpleTesting{
    public static void main(String[] args){
        Thread one = new Thread("New Thread");
        System.out.println("Thread state : "+one.getState());
        one.start();
        System.out.println("Thread state : "+one.getState());
        System.out.println("Thread Name : "+one.getName());
        System.out.println("Thread state : "+one.getState());
    }
}

输出:

Thread state : NEW
Thread state : RUNNABLE
Thread Name : New Thread
Thread state : TERMINATED

使用 Java 中的匿名类创建线程

这不是创建新线程的新方法;我们只是通过 Runnable 类使用了一个匿名类,将它传递给 Thread 构造函数,然后启动线程。请参阅下面的示例。

public class SimpleTesting{
    public static void main(String[] args){
        Thread t1 = new Thread(new Runnable() {
            public void run() {
                try {
                    System.out.println("New Thread Start");
                    Thread.sleep(1000);
                    System.out.println("Thread sleep for 1 second.");
                } catch(InterruptedException e) {
                    System.out.println(e);
                }
            }}); 
            t1.start();
    }
}

输出:

New Thread Start
Thread sleep for 1 second.

使用 Java 中的 lambda 函数创建线程

在 Java 8 版本中添加了 Lambda 函数功能,可用于替代 Java 中的匿名类。在这里,我们使用 lambda 函数创建了一个新线程。这是创建线程的一种紧凑而简短的方法。请参阅下面的示例。

public class SimpleTesting{
    public static void main(String[] args) throws InterruptedException{
        new Thread(() ->{
                try {
                    System.out.println("New Thread Start");
                    Thread.sleep(1000);
                    System.out.println("Thread sleep for 1 second.");
                } catch(InterruptedException e) {
                    System.out.println(e);
                }
            }){{start();}}.join(); 
    }
}

输出:

New Thread Start
Thread sleep for 1 second.

使用 Java 中的 Executors 类创建线程

Executors 是属于 Java 并发包的一个类,可用于创建多线程应用程序。所以,我们也可以用它来创建一个新线程。newSingleThreadExecutor() 方法初始化一个新线程,然后由 submit() 函数执行。请参阅下面的示例。

import java.util.concurrent.Executors;
public class SimpleTesting{
    public static void main(String[] args) throws InterruptedException{
        Executors.newSingleThreadExecutor().submit(() -> {
            try {
                System.out.println("New Thread Start");
                Thread.sleep(1000);
                System.out.println("Thread sleep for 1 second.");
            } catch(InterruptedException e) {
                System.out.println(e);
            }
        });
    }
}

输出:

New Thread Start
Thread sleep for 1 second.

相关文章 - Java Threading