在 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