第一章 線程基本概念(一)

一、線程基本概念

1. 同步和異步

同步:調用者必須等被調用者返回了結果後,纔可以執行接下來的操作。

異步:調用者無需等到被調用者返回結果後才能執行。被調用者可以異步執行。

2. 併發和並行

併發:某一具體時刻只有一個線程運行,而在一個時間範圍內,看到的是多線程一起執行的假象。

並行:某一時刻存在大於一個線程的多個線程在執行,真正的同時執行。

3. 臨界區

臨界區:多個線程共享的公共資源。但是一旦有一個線程佔用了臨界區資源,則其他線程都需要等待。

4. 阻塞和非阻塞

阻塞:如果一個線程佔用了臨界區資源,而其他線程也需要這個資源,那麼其他線程需要等待。等待會導致線程掛起,這個時候線程會阻塞。

非阻塞:沒有一個線程會妨礙其他線程執行。

5. 死鎖、飢餓、活鎖

死鎖:A佔用了臨界資源1,B佔用了臨界資源2,此時線程A需要獲取資源2才能執行,與此同時線程B需要資源1才能執行。

飢餓:一個線程因爲獲取不到必要的資源而導致長時間無法執行的狀態。

活鎖:和死鎖很像,線程A釋放資源1的同時線程B釋放資源2,而線程A搶到資源2的同時,線程B搶到資源1。

6 線程和進程

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

進程:可以容納多個線程,是正在運行的.exe程序。

7. 線程的狀態

就緒:剛創建的線程,等待start()調用。

運行:獲得CPU執行權。

阻塞:遇到synchronized代碼塊,等到其他線程釋放鎖。

等待:當調用wait()方法後,等待notify()方法。

死亡:線程執行結束。

二、線程的三性

1. 原子性:一個操作正在運行時是不會被另一個線程干擾的。對於32位Java虛擬機來說,由於long類型是64位,讀寫不是原子性的,因此可能出現不一致的結果。

2. 可見性:一個線程修改了某一個共享變量的數值,其他線程能否感知到這次修改。

3. 有序性:就一個線程或者同一個線程內,代碼運行時有序的。但是如果是多個線程,那麼線程之間是交替執行的,沒有統一的順序。

下一章 線程基本概念(二):https://mp.csdn.net/console/editor/html/107094199

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章