Java高併發和多線程系列 - 1. 線程基本概念

1. 什麼是線程? 線程和進程的區別多線程

在瞭解線程的概念前,咱們應該先知道什麼是進程?併發

進程是操做系統的基本概念之一, 它是正在執行的程序實例。函數

* 下面的一些進程的基本概念你能夠了解下 操作系統

--------------------------------------------------------------------線程

操做系統邏輯上將一個進程分爲如下幾部分(段):設計

# 文本生命週期

  程序的指令隊列

# 數據進程

  程序使用的靜態變量內存

# 堆

  程序可從該區域動態分配額外內存

# 棧

  隨函數調用和返回而增減的一片內存, 用於爲局部變量和函數調用連接信息分配存儲空間

--------------------------------------------------------------------


那麼,什麼是線程呢?

線程是程序執行的最小單位。

咱們能夠把線程看作是輕量級的進程。

使用多線程而不是多進程去進行併發程序的設計,是由於線程間的切換和調度成本要遠遠小於進程。

 

2. 線程的生命週期和各個狀態

NEW(新生)

線程剛被新建好以後,進入 NEW(新生)狀態

這個時候線程還沒開始執行

 

RUNNABLE(運行)

當線程的start()方法調用時, 才表示線程開始執行。

 

BLOCKED(阻塞)

若是線程在執行的過程當中遇到了synchronized同步塊, 就會進入

BLOCKED(阻塞)狀態, 這時線程會暫停執行,知道得到請求的鎖。

 

WAITING / TIMED_WAITING

這兩個狀態都是線程進入等待狀態

區別是: WAITING(無時間限制) / TIMED_WAITING(有時間限制)

wait()方法會讓線程進入等待隊列

notify()方法會在等待隊列中將線程喚醒

join()方法讓線程進入等待隊列,等目標線程終止

 

TERMINATED(終止)

當線程執行完畢後,則進入TERMINATED(終止)狀態

相關文章
相關標籤/搜索