Java 同步與異步-阻塞與非阻塞理解

Java 同步與異步-阻塞與非阻塞理解

Java 中同步與異步,阻塞與非阻塞都是用來形容交互方式,區別在於它們描述的是交互的兩個不一樣層面。java

同步與異步

同步與異步更關注交互雙方是否能夠同時工做。以同步的方式完成任務意味着多個任務的完成次序是串行的,假設任務 A 依賴於任務 B,那麼任務 A 必須等到任務 B 完成以後才能繼續,執行流程爲 A->B;以異步的方式完成任務意味着多個任務的完成能夠是並行的,這種狀況多適用於任務之間沒有因果關係,假如任務 A 中須要執行任務 B,而任務 A 的完成不依賴於任務 B 的結果,那麼任務 A 調用任務 B 後能夠繼續執行後續步驟而不須要等待任務 B 完成,也不關心任務 B 是否執行完畢,此時任務 A 和任務 B 是並行的。異步

爲了加深對同步和異步的理解,能夠使用打電話和發短信的類別同步和異步的交互方式。打電話時,一方的後續操做必須等到另外一方說完才能進行,這種交互方式就是同步的。發短信則意味着咱們不關心對方看到短信後的結果,咱們關心本身是否發了短信,發完短信後,咱們能夠接着手頭上的工做,這種交互方式就是異步的。對象

阻塞與非阻塞

阻塞與非阻塞關注的是交互雙方是否能夠彈性工做。假設對象 A 和對象 B 進行交互,而對象 B 對一個問題須要思考一段時間才能回覆 A,那麼對象 A 能夠選擇等待對象 B 回覆,這種方式就是一種阻塞式交互,與此同時,對象 A 能夠選擇在對象 B 進行思考的時間去完成別的工做,等到對象 B 完成思考後再進行後續交互,這種方式就是一種非阻塞式的交互。同步

通常來講,阻塞與非阻塞式用來形容 CPU 消耗的。咱們把 CPU 停下來等待慢操做完成之後再接着工做稱爲阻塞;把 CPU 在慢操做完成以前去完成其餘工做,等慢操做完成後再接着工做稱爲非阻塞。並行

相關文章
相關標籤/搜索