選單
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Java 教程

Java HOME Java Intro Java Get Started Java Syntax Java Output Java Comments Java Variables Java Data Types Java Type Casting Java Operators Java Strings Java Math Java Booleans Java If...Else Java Switch Java While Loop Java For Loop Java Break/Continue Java Arrays

Java Methods

Java Methods Java Method Parameters Java Method Overloading Java Scope Java Recursion

Java Classes

Java 面向物件程式設計 Java 類/物件 Java 類屬性 Java 類方法 Java 建構函式 Java 修飾符 Java 封裝 Java 包 / API Java 繼承 Java 多型 Java 內部類 Java 抽象 Java 介面 Java 列舉 Java 使用者輸入 Java 日期 Java ArrayList Java LinkedList Java 列表排序 Java HashMap Java HashSet Java 迭代器 Java 包裝類 Java 異常 Java 正則表示式 Java 執行緒 Java Lambda Java 高階排序

Java File Handling

Java Files Java Create/Write Files Java Read Files Java Delete Files

Java How To's

兩數相加 單詞計數 反轉字串 陣列元素求和 字串轉陣列 陣列排序 查詢陣列平均值 查詢最小元素 ArrayList 迴圈 HashMap 迴圈 遍歷列舉 矩形面積 偶數或奇數 正數或負數 平方根 隨機數

Java 參考

Java Reference Java Keywords Java String Methods Java Math Methods Java Output Methods Java Arrays Methods Java ArrayList Methods Java LinkedList Methods Java HashMap Methods Java Scanner Methods Java Iterator Methods Java Errors & Exceptions

Java 示例

Java Examples Java Compiler Java Exercises Java Quiz Java Server Java Certificate


Java 執行緒


Java 執行緒

執行緒允許程式透過同時執行多個任務來更高效地執行。

執行緒可用於在後臺執行復雜的任務,而不會中斷主程式。


建立執行緒

建立執行緒有兩種方式。

可以透過擴充套件 Thread 類並覆蓋其 run() 方法來建立執行緒

擴充套件語法

public class Main extends Thread {
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

建立執行緒的另一種方式是實現 Runnable 介面

實現語法

public class Main implements Runnable {
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

執行執行緒

如果類擴充套件了 Thread 類,可以透過建立該類的例項並呼叫其 start() 方法來執行執行緒

擴充套件示例

public class Main extends Thread {
  public static void main(String[] args) {
    Main thread = new Main();
    thread.start();
    System.out.println("This code is outside of the thread");
  }
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

自己動手試一試 »

如果類實現了 Runnable 介面,可以透過將該類的例項傳遞給 Thread 物件的建構函式,然後呼叫執行緒的 start() 方法來執行執行緒

實現示例

public class Main implements Runnable {
  public static void main(String[] args) {
    Main obj = new Main();
    Thread thread = new Thread(obj);
    thread.start();
    System.out.println("This code is outside of the thread");
  }
  public void run() {
    System.out.println("This code is running in a thread");
  }
}

自己動手試一試 »

“擴充套件”和“實現”執行緒之間的區別

主要區別在於,當一個類擴充套件 Thread 類時,您不能擴充套件任何其他類,但透過實現 Runnable 介面,也可以擴充套件其他類,例如:class MyClass extends OtherClass implements Runnable


併發問題

由於執行緒與其他程式部分同時執行,因此無法知道程式碼將以何種順序執行。當執行緒和主程式讀寫相同的變數時,這些值是不可預測的。由此產生的問題稱為併發問題。

示例

一個變數 amount 的值不可預測的程式碼示例

public class Main extends Thread {
  public static int amount = 0;

  public static void main(String[] args) {
    Main thread = new Main();
    thread.start();
    System.out.println(amount);
    amount++;
    System.out.println(amount);
  }

  public void run() {
    amount++;
  }
}

自己動手試一試 »

為了避免併發問題,最好線上程之間儘可能少地共享屬性。如果需要共享屬性,一種可能的解決方案是在使用執行緒可能更改的任何屬性之前,使用執行緒的 isAlive() 方法檢查執行緒是否已完成執行。

示例

使用 isAlive() 防止併發問題

public class Main extends Thread {
  public static int amount = 0;

  public static void main(String[] args) {
    Main thread = new Main();
    thread.start();
    // Wait for the thread to finish
    while(thread.isAlive()) {
      System.out.println("Waiting...");
    }
    // Update amount and print its value
    System.out.println("Main: " + amount);
    amount++;
    System.out.println("Main: " + amount);
  }
  public void run() {
    amount++;
  }
}

自己動手試一試 »




×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援