java 同步和非同步

2021-08-31 19:59:44 字數 995 閱讀 1689

同步:傳送乙個請求,等待返回,然後再傳送下乙個請求

非同步:傳送乙個請求,不等待返回,隨時可以再傳送下乙個請求

同步可以避免出現死鎖,讀髒資料的發生,一般共享某一資源的時候用,如果每個人都有修改許可權,同時修改乙個檔案,有可能使乙個人讀取另乙個人已經刪除的內容,就會出錯,同步就會按順序來修改。

非同步則是可以提高效率了,現在cpu都是雙核,四核,非同步處理的話可以同時做多項工作,當然必須保證是可以併發處理的。

這些都是對的。

同步和非同步最大的區別就在於。乙個需要等待,乙個不需要等待。

比如廣播,就是乙個非同步例子。發起者不關心接收者的狀態。不需要等待接收者的返回資訊

**,就是乙個同步例子。發起者需要等待接收者,接通**後,通訊才開始。需要等待接收者的返回資訊

阻塞

阻塞呼叫是指呼叫結果返回之前,當前執行緒會被掛起。函式只有在得到結果之後才會返回。有人也許會把阻塞呼叫和同步呼叫等同起來,實際上他是不同的。對於同步呼叫來說,很多時候當前執行緒還是啟用的,只是從邏輯上當前函式沒有返回而已。例如,我們在csocket中呼叫receive函式,如果緩衝區中沒有資料,這個函式就會一直等待,直到有資料才返回。而此時,當前執行緒還會繼續處理各種各樣的訊息。如果主視窗和呼叫函式在同乙個執行緒中,除非你在特殊的介面操作函式中呼叫,其實主介面還是應該可以重新整理。socket接收資料的另外乙個函式recv則是乙個阻塞呼叫的例子。當socket工作在阻塞模式的時候,如果沒有資料的情況下呼叫該函式,則當前執行緒就會被掛起,直到有資料為止。

非阻塞

非阻塞和阻塞的概念相對應,指在不能立刻得到結果之前,該函式不會阻塞當前執行緒,而會立刻返回。

物件的阻塞模式和阻塞函式呼叫

物件是否處於阻塞模式和函式是不是阻塞呼叫有很強的相關性,但是並不是一一對應的。阻塞物件上可以有非阻塞的呼叫方式,我們可以通過一定的api去輪詢狀態,在適當的時候呼叫阻塞函式,就可以避免阻塞。而對於非阻塞物件,呼叫特殊的函式也可以進入阻塞呼叫。函式select就是這樣的乙個例子。

java同步非同步

同步 傳送乙個請求,等待返回,然後再傳送下乙個請求 非同步 傳送乙個請求,不等待返回,隨時可以再傳送下乙個請求 同步可以避免出現死鎖,讀髒資料的發生,一般共享某一資源的時候用,如果每個人都有修改許可權,同時修改乙個檔案,有可能使乙個人讀取另乙個人已經刪除的內容,就會出錯,同步就會按順序來修改。非同步...

Java中的同步和非同步

以通訊為例 同步 傳送乙個請求 等待返回 然後再傳送下乙個請求 非同步 傳送乙個請求 不等待返回 隨時可以再傳送下乙個請求 併發 同時傳送多個請求.舉個例子 普通 b s模式 同步 ajax 技術 非同步 同步 提交請求 等待伺服器處理 處理完畢返回 這個期間客戶端瀏覽器不能幹任何事 非同步 請求通...

同步和非同步

同步執行模式 所謂同步執行模式,是指語句在同步執行模式下,將始終保持對程式流的控制,直至 程式結束。如查詢操作,客戶機上的應用程式在向伺服器發出查詢操作的指令後,將 一直等待伺服器將查詢結果返回客戶機端,然後才繼續進行下一步操作。眾所周知,應用程式要從乙個大表中刪除所有的記錄將是非常耗時的,如果應用...