Java中的多線程解釋[帶示例]

已發表: 2021-06-15

目錄

Java中的線程

Java 中的線程有助於程序的高效運行。 形式執行的兩個基本單元是進程和線程。 進程可能是應用程序、程序或自包含執行環境。

而線程與進程共享資源並與之共存。 每個 Java 應用程序中至少存在一個線程,稱為主線程。 可以從主線程創建多個線程。 了解有關如何在 Java 中創建線程的更多信息。

Java 線程的好處

  • 與進程相比,創建線程所需的時間和資源更少。 因此線程也被稱為輕量級進程。
  • 父進程數據和代碼由線程共享。
  • 與進程中的相互通信相比,線程之間的相互通信更容易。
  • Java 中的線程可以通過 java.lang 的實現來創建。 可運行接口。

單線程

在一個程序中存在幾個處理單元,其中最小的一個被稱為單線程。 通過使用“線程類”,Java 應用了線程。 存在兩種類型的線程; 守護線程和用戶線程。

當要清理應用程序時,會使用守護線程。 它在應用程序的後台運行。 而用戶線程是在應用程序首次啟動時創建的。

單線程的優點:

  • 隨著系統中發生單個線程的執行,應用程序開銷減少。
  • 使用單線程降低了應用程序的維護成本。

Java中的多任務處理

多任務處理是指 CPU 一次執行多個任務的過程。 有時,用戶可能會在任務之間進行 CPU 切換,以便與每個程序一起協作。 單獨的內存和資源分配給多任務處理中的進程。 通過兩種方式,可以實現多任務處理。

1. Multiprocessing(基於進程的多任務處理)

  • 為每個進程分配一個單獨的內存區域。 因此,內存中的每個進程都有一個地址。
  • 這些過程是重量級的。
  • 進程之間的通信成本很高。
  • 在進程之間切換需要一些時間。 這是更新列表、內存映射等所必需的。

2. Multithreading(基於線程的多任務)

  • 線程之間共享相同的地址。
  • 線程是輕量級的。
  • 線程之間的通信成本很低。

什麼是多線程?

當一個程序中同時執行兩個或多個線程時,這種機制稱為多線程。 單個進程會創建許多線程,從而增加計算能力。 一個程序的兩個或多個部分以導致 CPU 利用率最大化的方式執行。

線程被稱為程序的各個部分。 應用程序中的進程可以包含多個線程或單個線程。
Java 虛擬機允許應用程序的多個線程。 每個線程都有自己的優先級。 因此,與具有較低優先級的線程相比,優先執行具有較高優先級的線程。

為了實現多任務,多線程和多處理的過程都被使用。 因為共享內存區域用於多線程,所以它主要用於多處理。 內存被保存,因為不需要額外分配內存。 此外,由於線程之間發生上下文切換,因此所花費的時間少於多處理。

在動畫、遊戲中,使用Java多線程 如果您想了解有關 Java 體系結構和組件的更多信息,請單擊。

有兩種機制可用於創建線程。

1.線程類擴展

2.Runnable接口實現

線程類與可運行接口

  • 擴展“線程類”不能擴展其他類,因為 Java 不支持多重繼承。 但是通過“Runnable”接口的實現,可以從該類擴展其他基類。
  • 可以通過擴展 Thread 類來擴展線程的基本功能,因為它提供了諸如 interrupt()、yield() 等內置方法。
  • 使用runnable時會提供一個多線程可以共享的對象。

Java 線程類

Java中的線程編程是通過線程類實現的。 構造函數由線程類和執行線程操作的方法提供。 線程類實現了一個可運行接口並擴展了 Object 類。

一些常用的線程方法是:

  1. start():通過該方法啟動線程執行。 JVM 調用 run() 方法。
  2. sleep(int milliseconds):線程的執行暫停了幾毫秒,這是因為線程進程通過此方法進入睡眠狀態。 暫停後,線程的執行再次開始。 線程可以通過這種方法進行同步。
  3. getName():通過該方法返迴線程名。
  4. setPriority(int new priority):通過該方法改變線程優先級。
  5. yield():通過該方法使當前線程隨著​​其他線程的執行而停止。
  6. run():該方法用於在線程中啟動一個動作。
  7. getPriority():通過使用該方法返迴線程優先級。
  8. setName():通過此方法更改線程名稱。
  9. getId():通過該方法返迴線程id。
  10. suspend():線程通過這個方法被掛起。

線程生命週期

線程生命週期有不同的階段,列舉如下:

  1. 新增: “線程類”用於在此階段創建線程。 在線程啟動之前,程序停留在這個階段。 該方法也稱為天生線程。
  2. Runnable: start方法在線程生命週期的這個階段調用線程實例。 調度程序被移交給線程的控制以完成執行。 是否應該執行線程取決於調度程序。
  3. 運行:一旦線程開始執行,階段就轉移到“運行”階段。 調度程序從線程池中選擇一個線程並開始執行應用程序。
  4. 等待:顧名思義,在生命週期的這個階段,線程等待。 由於在應用程序中運行多個線程,線程同步是必不可少的。 因此,一個線程有必要等待,直到另一個線程的執行結束。 因此,生命週期的階段也稱為等待階段。
  5. Dead:線程終止的階段稱為“dead”階段。 一旦線程從運行轉移到處理結束,它就會終止,因此處於“死狀態”

Java中的線程同步

在多線程的情況下,程序中會發生異步行為。 如果假設數據是通過一個線程寫入的,而數據的讀取同時由另一個線程執行,則可能會在應用程序中產生不一致。

線程之間共享的資源需要被其他線程訪問。 因此,在這種情況下,接近同步的方法。 Java 中提供了同步方法來實現同步行為。

當一個線程到達同步塊時,一旦到達,該方法就不能被同一對像上的其他線程調用。 在線程完成執行塊並退出之前,其他線程必須停止並等待。

從世界頂級大學在線學習軟件課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

多線程的優點

  • 可以同時執行多個操作。 隨著獨立線程的運行,用戶不會被阻塞。
  • 由於多個操作一起運行,因此節省了時間。
  • 一個線程不能被另一個線程影響,因為它們是獨立的。 一個線程發生異常不會影響其他線程的執行。

多線程示例

java中的多線程程序示例如下所示:

資源

圖 1:多線程代碼示例的片段

代碼說明

第 3 行:“GuruThread1”類實現了 runnable。

第 8 行:顯示類主方法。

第 9 行:實例化線程類並創建實例“guruThread1”並創建線程。

第 10 行:實例化“Thread 類”並創建實例“guruThread2”和線程。

第 11 行:啟動名為 guruThread1 的線程。

第 12 行:啟動名為 guruThread2 的線程。

第 13 行:輸出文本“Thread names are following:”。

第 14 行:方法 getName() 用於獲取 thread1 名稱。

第 15 行:方法 getName() 用於獲取 thread2 名稱。

執行上述代碼會產生以下輸出:

資源

圖: Java 多線程程序生成的輸出截圖(取自

結論

本文討論了Java 中的多線程概念以及 Java中的多線程程序示例 您的學習並不止於此,還要了解 Java 的所有其他基礎概念。

如果您有興趣以實惠的價格掌握編程技能並為行業做好準備,您可以查看 upGrad 提供的“計算機科學理學碩士”課程。 它適用於 21 至 45 歲年齡段的所有中級專業人士。 該課程由利物浦約翰摩爾斯大學認證,設計有 500 多個小時的學習時間、309 個項目和作業,讓您發揮出最好的一面。 如果您有任何疑問,請給我們留言,我們的團隊將與您聯繫。

踏上夢想的工作

從 IIIT-B 申請軟件開發執行 PG 計劃