- 同步
同步,就是在發出一個功能調用時,在沒有得到結果之前,該調用就不返回。
要想實現同步操作,必須要獲得線程的對象鎖。獲得它可以保證在同一時刻只有一個線能夠進入臨界區,並且在這個鎖被釋放之前,其他的線程都不能再進入這個臨界區。如果其他線程想要獲得這個對象的鎖,只能進入等待隊列等待。只有當擁有該對象鎖的線程退出臨界區時,鎖才會被釋放,等待隊列中優先級最高的線程才能獲得該鎖。
實現同步的方式有兩種:同步方法、同步代碼塊。
- 異步
當一個異步過程調用發出后,調用者不會立刻得到結果。實際處理這個吊用的部件是在調用發出后,通過狀態、通知來通知調用者,或通過回調函數處理這個調用。
由於每個線程都包含了運行時自身所需要的數據或方法,因此,在進行輸入輸出時,不必關系其他線程的狀態或行為,也不必等到輸入輸出處理完畢才返回。當應用程序在對象上調用了一個需要花費很長時間來執行的方法,並且不希望讓程序等待方法的返回時,就應該使用異步編程,異步能夠提高程序的效率。
- 阻塞
阻塞調用是指調用結果返回之前,當前線程會被掛起。函數只有在得到結果之后才會返回。
- 非阻塞
指在不能立刻得到結果之前,該函數不會阻塞當前線程,而會立刻返回。
- 同步與阻塞
同步是個過程,阻塞是線程的一種狀態。多個線程操作共享變量時可能會出現競爭。這時需要同步來防止兩個以上的線程同時進入臨界區,在這個過程中,后進入臨界區的線程將阻塞,等待先進入的線程走出臨界區。
- 線程同步一定發生阻塞嗎?
線程同步不一定發生阻塞!!!線程同步的時候,需要協調推進速度,互相等待和互相喚醒會發生阻塞。