高并发01_synchronized
關于synchronized關鍵字:
一句話說出Synchronized的作用
能夠保證在同一時刻最多只有一個線程執行該段代碼,以達到保證并發安全的效果。
Synchronized的地位
- Synchronized是Java的一個關鍵字
- 是最基本的互斥同步的手段
- 是并發編程中的元老級角色,是并發編程的必學內容
Synchronized的兩種用法介紹
對象鎖,包括方法鎖(默認鎖對象為this當前實例對象)和同步代碼塊鎖(自己指定鎖對象)。
類鎖,指synchronized修飾靜態的方法或指定鎖為Class對象。
第一個用法:對象鎖
代碼塊鎖
代碼塊形式:手動指定鎖對象
鎖對象的選取:若不特定鎖對象,可以用this(當前對象)作為我們的鎖。
例子如下:
Object的對象o放在堆里的,在堆上加了鎖,當有線程訪問這個對象,并想執行最后兩個語句時,應該首先要拿到這個鎖,然后進行訪問,當第二個線程過來想拿鎖的時候,應該是第一個線程執行完之后,把鎖釋放。鎖的互斥。
方法鎖形式
synchronized修飾普通方法(非靜態方法),鎖對象默認為this
這兩種是一樣的,鎖定的是this對象,不是鎖定整段代碼。
synchronized鎖定是一個對象,而不是代碼塊。
第二個用法:類鎖
類鎖的概念
概念:Java類可能有很多對象,但只有一個Class對象
本質:所謂的類鎖,就是Class對象的鎖
用法和效果:類鎖在同一時刻只能被一個對象擁有
形式一:synchronized加在static方法上
形式二:synchronized(*.class)代碼塊
這里寫synchronized(this)是不可以,靜態的屬性和方法是不需要new出對象進行訪問的
是new了一個對象,多個線程一起訪問這個對象
5個線程可能會出現線程重復的問題。這個時候是沒有鎖的,可能存在一個線程還沒有訪問完,另外一個線程又來了。
加上鎖,上述問題就不存在了。加上synchronized之后,這個代碼塊是原子操作,不可分的。
總結
以上是生活随笔為你收集整理的高并发01_synchronized的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: The Innovation | 中国开
- 下一篇: opencv 车道线检测(三)