同步和非同步通常用來形容一次方法呼叫。同步方法呼叫一開始,呼叫者必須等待被呼叫的方法結束後,呼叫者後面的**才能執行。而非同步呼叫,指的是,呼叫者不用管被呼叫方法是否完成,都會繼續執行後面的**,當被呼叫的方法完成後會通知呼叫者。
比如,在超時購物,如果一件物品沒了,你得等倉庫人員跟你調貨,直到倉庫人員跟你把貨物送過來,你才能繼續去收銀台付款,這就類似同步呼叫。而非同步呼叫了,就像網購,你在網上付款下單後,什麼事就不用管了,該幹嘛就幹嘛去了,當貨物到達後你收到通知去取就好。
併發和並行是十分容易混淆的概念。併發指的是多個任務交替進行,而並行則是指真正意義上的「同時進行」。實際上,如果系統內只有乙個cpu,而使用多執行緒時,那麼真實系統環境下不能並行,只能通過切換時間片的方式交替進行,而成為併發執行任務。真正的並行也只能出現在擁有多個cpu的系統中。
阻塞和非阻塞通常用來形容多執行緒間的相互影響,比如乙個執行緒占有了臨界區資源,那麼其他執行緒需要這個資源就必須進行等待該資源的釋放,會導致等待的執行緒掛起,這種情況就是阻塞,而非阻塞就恰好相反,它強調沒有乙個執行緒可以阻塞其他執行緒,所有的執行緒都會嘗試地往前執行。
臨界區用來表示一種公共資源或者說是共享資料,可以被多個執行緒使用。但是每個執行緒使用時,一旦臨界區資源被乙個執行緒占有,那麼其他執行緒必須等待。
JAVA併發程式設計學習
併發程式設計主要目的是為了在相同的時間內讓程式執行得更快或者處理更多的任務。為了實現這一目的,併發程式設計會面臨很多的挑戰。併發程式設計必然會帶來多執行緒之間的問題,比如上下文之間的切換,執行緒死鎖,以及硬體資源的限制。無論是單核還是多核處理器都支援多執行緒。在單核處理器中,cpu會給每個執行緒分配...
java併發程式設計學習(3)
銀行排隊叫號的場景如圖所示 有乙個出票機,按順序出票。有多個櫃檯叫號。對於這樣的場景,實現可以分為2部分,出票機和櫃檯。出票機public class ticketwindow implements runnable catch interruptedexception e 新建ticketwind...
java併發程式設計實踐學習
1.futuretask有個簡單理解,但是例子不是非常懂,get 是返回結果,沒有結果的話阻塞,為什麼能處理耗時的計算操作呢?2.copyonwritearraylist究竟在什麼時候複製啊?2013 2 20 p294 清單14.3是什麼意思,先驗條件在 用到了 2013 2 21 p294 29...