java中的多執行緒是一個同時執行多個執行緒的進程。執行緒是一個輕量級的子進程,是最小的處理單元。多進程和多執行緒都用於實現多工處理。
但是,一般使用多執行緒而不是多進程,這是因為執行緒使用共用記憶體區域。它們不分配單獨的記憶體區域以節省記憶體,並且執行緒之間的上下文切換比進程花費的時間更少。
Java多執行緒主要用於遊戲,動畫等。
(1)它不會阻塞使用者,因為執行緒是獨立的,可以同時執行多個操作。
(2)可以一起執行許多操作,因此可以節省時間。
(3)執行緒是獨立的,因此如果在單個執行緒中發生異常,它不會影響其他執行緒。
多工處理是同時執行多個任務的過程。使用多工來利用CPU,多工處理可以通過兩種方式實現:
基於進程的多工處理(多進程)
基於執行緒的多工處理(多執行緒)
注意:一次只執行一個執行緒。
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() | 它設定當執行緒由於未捕獲的異常而突然終止時呼叫的預設處理程式。 |
執行緒是一個輕量級的子進程,是最小的處理單元。它是一個單獨的執行路徑。
執行緒是獨立的。 如果在一個執行緒中發生異常,則不會影響其他執行緒。 它使用共用記憶體區域。
如上圖所示,執行緒在進程內執行。執行緒之間存在上下文切換。 作業系統中可以有多個進程,一個進程可以有多個執行緒。