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中的線程是什麼

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

Java多線程教程

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