java多執行緒一些相關概念

2021-07-31 07:16:19 字數 1007 閱讀 1288

同步和非同步:同步方法呼叫開始後,需等到本次呼叫有結果才繼續往後執行;非同步呼叫發生後,呼叫者無需等待返回,繼續後續執行。舉個例子你出去打籃球先到樓下小賣部買瓶水,老闆店裡現在沒貨,要去別的地方取,這個時候你要是等老闆取到水給你你再去打籃球那這就是同步呼叫,而要是你跟老闆約定水到了以後給你送到籃球場,你自己先去打球,那這個過程就是非同步呼叫。

併發和並行:併發偏重於多個任務交替執行,由系統分配時間片,由於切換頻繁看起來像是同時執行,而實際上同一時刻只有乙個任務在執行。並行則是真正意義上的同時執行。

臨界區:或者說是共享資源,但是同一時刻只能被乙個執行緒占用,最經典的例子就是印表機了(乙個公司只有一台的那種)。

阻塞和非阻塞:通俗點說就是兩個執行緒是否互相影響,占用相同的資源。還是上邊的印表機,同事a在列印檔案,這是同事b要是也要列印東西的話就只能等待,對於執行緒而言,等待會導致掛起,這種情況就是阻塞了(這個時候要是領導也要列印檔案的話,可能會導致a、b都等待了,因為領導優先順序比較高);非阻塞強調的是執行緒間互相沒有影響。

死鎖、飢餓、活鎖:死鎖是比較糟糕的情況,以ab兩人吃飯為例,兩人相對而坐,桌上只有兩根筷子,兩人按照習慣都先伸出右手去拿右邊的筷子,然後再去拿左邊的筷子,如果兩人都不放棄自己手上的筷子那麼這個狀態就將一直持續,也就是發生了死鎖;飢餓就是同事a想用印表機的時候發現前邊領導再用,於是a站在後邊等待,但是比較悲劇的是後續又有幾個領導過來要列印檔案,於是同事a就一直等,這種情況就稱為飢餓,由於領導優先順序比較高或者臉皮比較厚一直佔著資源不放,就會導致同事a一直無法正常工作。飢餓在一段時間以後是有可能解決的。活鎖就是肥皂劇裡乙個比較常見的鏡頭——男女主角小路上相對偶遇,互相謙讓,讓對方先過,結果是一而再、再而三的撞在一起,這種情況發生在兩個執行緒間就是不斷地主動釋放資源給其他執行緒使用,導致沒有執行緒可以同時拿到所有資源正常執行。

無鎖cas(compare and swarp):所有執行緒都可以訪問臨界區,保證必然有乙個執行緒能在有限的次數內完成操作,離開臨界區。juc的包中有很多涉及cas的類,原理大致是在運算元據時傳入原值及預期值,若是處理結果與預期值不符則重試,以此保證在當前執行緒的操作沒有受到其他執行緒影響。

java中多執行緒的一些知識

countdownlatch,乙個同步輔助類,在完成一組正在其他執行緒中執行的操作之前,它允許乙個或多個執行緒一直等待。主要方法 public countdownlatch int count public voidcountdown public voidawait throws interrup...

C 多執行緒 一 多執行緒的相關概念

什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的函式。什麼是多執行緒...

多執行緒程式設計相關概念

很多同學都聽說過,現代作業系統比如mac os x,unix,linux,windows等,都是支援 多工 的作業系統。什麼叫 多工 呢?簡單地說,就是作業系統可以同時執行多個任務。打個比方,你一邊在用瀏覽器上網,一邊在聽 一邊在用word趕作業,這就是多工,至少同時有3個任務正在執行。還有很多任務...