1. 程式人生 > >Java 多執行緒高併發 1 — 幾個重要的概念

Java 多執行緒高併發 1 — 幾個重要的概念

原子性:

  • 和物理上的原子貌似沒多大關係,對於一系列的操作只能單個執行緒做處理,不能有其他執行緒干擾,例如多個人想往同一個杯子倒茶,但只有一個茶壺,只有等這個茶壺讓出來才能繼續讓其他人倒茶

有序性:

  • 在併發的時候,程式的執行可能是亂序的,這裡並不是程式本身程式碼的邏輯亂序,而是多個程式對於同一個變數的操作或者同一段程式碼的操作,其先後順序並不能根據執行緒啟動的先後來定,例如多個人同時做往一個杯子倒茶的工作,有多個茶壺,誰速度快,就能給杯子多倒茶,這裡並沒有要求誰能倒茶,誰不能倒茶

可見性:

  • 指當一個執行緒修改了某個變數,其他執行緒能否立刻知道,例如多個人同時做往一個杯子倒茶的工作,有多個茶壺,如果大家都不知道杯子有多少茶,很可能會溢位

指令重排:

  • 在程式中某些程式碼的語序調換一下並不會對程式的執行有任何影響(單執行緒情況下的邏輯),但是調換一下會為程式的執行提高效率(因為 CPU 對於指令的執行是有一定先後和硬體的限制的),那麼 JVM 可能會優化重新排序,提高程式執行效率,但是多執行緒情況下可能會引發比較嚴重的問題