1、首先明確一點,對于單核CPU,任意一個時刻只有一個線程在運行。那么既然這樣,多線程還有什么意義呢? 舉例來說,現在只有一個人,要做好幾個任務。單線程就是,任務一個一個地做,必須做完一個任務后,再去做另一個任務。多線程就是一會做這個任務,一會做那個任務,每個任務做一會,不停的切換。顯然,最后把所有的任務做完,多線程必定比單線程更耗費時間。為什么?因為,多線程要在不同的任務之間切換,切換肯定是要耗費時間的。那么問題來了,既然多線程比單線程更耗費時間,為什么還要多線程? 單線程有一個致命的問題,就是一個線程運行的整個過程中,其他線程必須等待,不能響應用戶的命令,用戶體驗太差,好像電腦死機一樣。假如單線程,你能想象一下,用戶在聽歌的時候不能寫文檔,這種體驗也太差了。多線程的時候,單核CPU一會做這個任務,一會做那個任務,切換的時間是毫秒級的,用戶完全感覺不出來。從而給用戶照成錯覺,感覺這些任務并行的運行。
2、同步的使用場景:多個線程同時訪問一塊數據,也叫共享區。對于多個線程同時訪問一塊數據的時候,必須使用同步,否則可能會出現不安全的情況。比如數據庫中的臟讀。但是,多個線程同時訪問一塊數據,有一種情況不需要同步技術,那就是原子操作,也就是說操作系統在底層保證了操作要么全部做完,要么不做。
3、異步的使用場景:只有一個線程訪問當前的數據。比如,觀察者模式,沒有共享區,主題發生變化,通知觀察者更新,主題繼續做自己的事情,不需要等待觀察者更新完成后再工作。