學習java多執行緒,這必須搞懂的這幾個概念

茅坤寶駿氹發表於2018-05-02

轉載自 學習java多執行緒,這必須搞懂的這幾個概念,很重要。

同步和非同步


同步,Synchronous,即呼叫方法開始,一旦呼叫就必須等待方法執行完返回才能繼續下面的操作。

舉個例子,你去銀行ATM取錢,你必須等到ATM吐完錢你拿到錢取完卡你才能離開。


非同步,Asynchronous,即不關心方法執行的過程,觸發要呼叫的方法就繼續執行下面的操作,不會像同步那樣阻塞直要到方法完成才繼續。

舉個例子,你這次要取錢,數量較大,你直接電話或者APP預約銀行說你要取多少萬現金,這段時間銀行會為你準備錢,而這與你都沒什麼關係,然後你只要按預定的時候去取就行了,對你於而言,你們是觸發了一個非同步動作而已。


併發和並行


併發,Concurrency,即一段時間內多個任務在執行,但不一定是同時在執行,它們可能是交替在執行,也有可能是序列執行的。


並行,Parallelism,這個就是多個任務在同時執行,可以理解為併發裡面有一部分任務在並行執行。


單核CPU不會有並行操作,應為一個CPU一次只能執行一條指令,並行操作只存在於多核CPU中。


阻塞和非阻塞


阻塞,Blocking,如果一個執行緒佔用了一個公共資源而沒有釋放對它的鎖,另外別的一些執行緒想要繼續執行就只能等它釋放鎖,這時候就造成阻塞了。


非阻塞,Non-Blocking,就是沒有阻塞,執行緒可以自由執行,沒有鎖定公共資源,不相互阻塞執行。


相關文章