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中的線程是什么
線程是一個輕量級的子進程,是最小的處理單元。它是一個單獨的執行路徑。
線程是獨立的。 如果在一個線程中發生異常,則不會影響其他線程。 它使用共享內存區域。
如上圖所示,線程在進程內執行。線程之間存在上下文切換。 操作系統中可以有多個進程,一個進程可以有多個線程。
易百教程移動端:請掃描本頁面底部(右側)二維碼并關注微信公眾號,回復:"教程" 選擇相關教程閱讀或直接訪問:http://m.yiibai.com 。
開始學習 >> :線程的生命周期(線程狀態)
加QQ群啦,易百教程官方技術學習群
注意:建議每個人選自己的技術方向加群,同一個QQ最多限加 3 個群。