作用:
- synchronized 表示只有一個線程可以獲取作用對象的鎖,執行代碼,阻塞其他線程。
- volatile 表示變量在 CPU 的寄存器中是不確定的,必須從主存中讀取。保證多線程環境下變量的可見性;禁止指令重排序。
區別:
- synchronized 可以作用於變量、方法、對象;volatile 只能作用於變量。
- synchronized 可以保證線程間的有序性(猜測是無法保證線程內的有序性,即線程內的代碼可能被 CPU 指令重排序)、原子性和可見性;volatile 只保證了可見性和有序性,無法保證原子性。
- synchronized 線程阻塞,volatile 線程不阻塞。
- Java 自學指南
- Java 面試題匯總PC端瀏覽【點這里】
- Java知識圖譜
- Java 面試題匯總小程序瀏覽,掃二維碼
所有資源資源匯總於公眾號