原子性:
對數據操作是原子操作,即是獨一無二的,如果系統指令是一對一操作的話,那麼就不會有原子性問題,但是的代碼操作有的是多條指令進行的。
互斥性:
進行數據操作的時候,不能運行其他線程進行讀和寫。
共享性:
在多線程編程中,數據共享是不可避免的。最典型的場景是數據庫中的數據,爲了保證數據的一致性,我們通常需要共享同一個數據庫中數據
可見性:
內存中數據的可見性。
有序性:
編譯器和處理器可能會對指令做重排序 。
- 代碼塊的同步是通過 monitorenter 和 monitorexit 指令獲取線程的執行權
- 方法的同步是通過加 ACC_SYNCHRONIZED 標識實現線程的執行權的控制
偏向鎖(假定線程是不存在競爭的情況,用來優化synchronized的效率):
輕量級鎖(線程併發數並不是那麼高的情況下,啓用輕量級鎖,CAS方法該表對象裏指向線程的指針):
重量級鎖(線程併發數高的情況下,升級爲重量級鎖,直接進入阻塞態,不採用自選方式)::