1. 什麼是線程? 線程和進程的區別多線程
在瞭解線程的概念前,咱們應該先知道什麼是進程?併發
進程是操做系統的基本概念之一, 它是正在執行的程序實例。函數
* 下面的一些進程的基本概念你能夠了解下 操作系統
--------------------------------------------------------------------線程
操做系統邏輯上將一個進程分爲如下幾部分(段):設計
# 文本生命週期
程序的指令隊列
# 數據進程
程序使用的靜態變量內存
# 堆
程序可從該區域動態分配額外內存
# 棧
隨函數調用和返回而增減的一片內存, 用於爲局部變量和函數調用連接信息分配存儲空間
--------------------------------------------------------------------
那麼,什麼是線程呢?
線程是程序執行的最小單位。
咱們能夠把線程看作是輕量級的進程。
使用多線程而不是多進程去進行併發程序的設計,是由於線程間的切換和調度成本要遠遠小於進程。
2. 線程的生命週期和各個狀態
NEW(新生)
線程剛被新建好以後,進入 NEW(新生)狀態
這個時候線程還沒開始執行
RUNNABLE(運行)
當線程的start()方法調用時, 才表示線程開始執行。
BLOCKED(阻塞)
若是線程在執行的過程當中遇到了synchronized同步塊, 就會進入
BLOCKED(阻塞)狀態, 這時線程會暫停執行,知道得到請求的鎖。
WAITING / TIMED_WAITING
這兩個狀態都是線程進入等待狀態
區別是: WAITING(無時間限制) / TIMED_WAITING(有時間限制)
wait()方法會讓線程進入等待隊列
notify()方法會在等待隊列中將線程喚醒
join()方法讓線程進入等待隊列,等目標線程終止
TERMINATED(終止)
當線程執行完畢後,則進入TERMINATED(終止)狀態