Java多執行緒教學


java中的多執行緒是一個同時執行多個執行緒的進程。執行緒是一個輕量級的子進程,是最小的處理單元。多進程和多執行緒都用於實現多工處理。

但是,一般使用多執行緒而不是多進程,這是因為執行緒使用共用記憶體區域。它們不分配單獨的記憶體區域以節省記憶體,並且執行緒之間的上下文切換比進程花費的時間更少。

Java多執行緒主要用於遊戲,動畫等。

1. Java多執行緒的優點

(1)它不會阻塞使用者,因為執行緒是獨立的,可以同時執行多個操作。
(2)可以一起執行許多操作,因此可以節省時間。
(3)執行緒是獨立的,因此如果在單個執行緒中發生異常,它不會影響其他執行緒。

2. 多工處理

多工處理是同時執行多個任務的過程。使用多工來利用CPU,多工處理可以通過兩種方式實現:

基於進程的多工處理(多進程)
基於執行緒的多工處理(多執行緒)

2.1. 基於進程的多工處理(多進程)

  • 每個進程在記憶體中都有一個地址。 換句話說,每個進程分配一個單獨的記憶體區域。
  • 進程是重量級的。
  • 進程之間的通訊成本很高。
  • 從一個進程切換到另一個進程需要一些時間來儲存和載入暫存器,記憶體對映,更新列表等。

2.2. 基於執行緒的多工處理(多執行緒)

  • 執行緒共用相同的地址空間。
  • 執行緒是輕量級的。
  • 執行緒之間的通訊成本很低。

注意:一次只執行一個執行緒。

Java Thread類

Java提供了Thread類來實現執行緒程式設計。 Thread類提供了線上程上建立和執行操作的建構函式和方法。 Thread類擴充套件了Object類並實現了Runnable介面。

Java執行緒方法

編號 修辭符 方法 描述
1 void start() 它用於開始執行執行緒。
2 void run() 它用於為執行緒執行操作。
3 static void sleep() 它會在指定的時間內休眠一個執行緒。
4 static Thread currentThread() 它返回對當前正在執行的執行緒物件的參照。
5 void join() 它等待執行緒死亡
6 int getPriority() 它返回執行緒的優先順序。
7 void setPriority() 它設定改變執行緒的優先順序。
8 String getName() 它返回執行緒的名稱。
9 void setName() 它用於設定執行緒的名稱。
10 long getId() 它返回執行緒的編號(id)。
11 boolean isAlive() 它測試執行緒是否存活。
12 static void yield() 它使當前正在執行的執行緒物件暫停並允許其他執行緒臨時執行。
13 void suspend() 它用於掛起執行緒。
14 void resume() 它用於恢復掛起的執行緒。
15 void stop() 它用於停止執行緒。
16 void destroy() 它用於銷毀執行緒組及其所有子組。
17 boolean isDaemon() 它測試該執行緒是否是一個守護程式執行緒。
18 void setDaemon() 它將執行緒標記為守護程式或使用者執行緒。
19 void interrupt() 它會中斷執行緒。
20 boolean isinterrupted() 它測試執行緒是否被中斷。
21 static boolean interrupted() 它測試當前執行緒是否已被中斷。
22 static int activeCount() 它返回當前執行緒的執行緒組中活動執行緒的數量。
23 void checkAccess() 它確定當前執行的執行緒是否具有修改執行緒的許可權。
24 static boolean holdLock() 當且僅當當前執行緒在指定物件上儲存監視器鎖時,它才返回true
25 static void dumpStack() 它用於將當前執行緒的堆疊跟蹤列印到標準錯誤流。
26 StackTraceElement[] getStackTrace() 它返回一個堆疊跟蹤元素陣列,表示執行緒的堆疊轉儲。
27 static int enumerate() 它用於將每個活動執行緒的執行緒組及其子組複製到指定的陣列中。
28 Thread.State getState() 它用於返回執行緒的狀態。
29 ThreadGroup getThreadGroup() 它用於返回此執行緒所屬的執行緒組
30 String toString() 它用於返回此執行緒的字串表示形式,包括執行緒的名稱,優先順序和執行緒組。
31 void notify() 它僅用於為等待指定物件的一個執行緒發出通知。
32 void notifyAll() 它用於向指定物件的所有等待執行緒發出通知。
33 void setContextClassLoader() 它為Thread設定上下文ClassLoader
34 ClassLoader getContextClassLoader() 它返回執行緒的上下文ClassLoader
35 static Thread.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() 它返回由於未捕獲的異常而導致執行緒突然終止時呼叫的預設處理程式。
36 static void setDefaultUncaughtExceptionHandler() 它設定當執行緒由於未捕獲的異常而突然終止時呼叫的預設處理程式。

java中的執行緒是什麼

執行緒是一個輕量級的子進程,是最小的處理單元。它是一個單獨的執行路徑。
執行緒是獨立的。 如果在一個執行緒中發生異常,則不會影響其他執行緒。 它使用共用記憶體區域。

如上圖所示,執行緒在進程內執行。執行緒之間存在上下文切換。 作業系統中可以有多個進程,一個進程可以有多個執行緒。