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