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中的線程是什麼
線程是一個羽量級的子進程,是最小的處理單元。它是一個單獨的執行路徑。
線程是獨立的。 如果在一個線程中發生異常,則不會影響其他線程。 它使用共用記憶體區域。
如上圖所示,線程在進程內執行。線程之間存在上下文切換。 操作系統中可以有多個進程,一個進程可以有多個線程。
開始學習 >> :線程的生命週期(線程狀態)