日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java查看对象锁级别_对象级别锁 vs 类级别锁(Java)

發布時間:2023/11/27 生活经验 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java查看对象锁级别_对象级别锁 vs 类级别锁(Java) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

對于多線程(并發)和Spring Boot這兩塊在同步進行學習中,在看到使用synchronized關鍵字使操作同步時,看到和C#中不一樣的東西,所以這里呢,就深入學習了下,若有錯誤之處,還望指正。

對象級別鎖 vs 類級別鎖

我們知道由于并發會導致線程不安全的問題,此時我們手段之一采取線程同步,也就是說使得所有并發線程在執行中保持同步的過程,當方法聲明為同步時,傳遞到同步塊中的對象稱之為監視器或鎖定對象,如果有另外一個線程也在執行該同步方法,那么該線程將被阻塞,直到線程釋放該監視器或鎖定對象。我們在類中已定義的方法或塊上使用synchronized關鍵字,同時synchronized關鍵字不能與類定義中的變量或屬性一起使用。

對象級別鎖

所謂的對象級別鎖,也就是針對非靜態方法執行同步塊鎖定,那么同步塊中的監視器或鎖定對象則是基于對象實例,有如下三種形式

class Test {

public synchronized void LockMethod() {

}

}

或者

class Test {

public void LockMethod() {

synchronized(this)

{

}

}

}

或者

class Test {

private final Object lock = new Object();

public void LockMethod() {

synchronized (lock) {

}

}

}

類級別鎖

若在同步方法中存在靜態數據,為保持靜態數據線程安全,我們則需使用類級別鎖,這意味著,如果在運行時有多個實例的Test,則一次只能在一個實例中的一個線程上執行一個線程LockMethod(),而所有其他實例將被其他線程鎖定。針對類級別鎖,那么同步塊中監視器或鎖定對象有如下三種形式:

class Test {

public synchronized static void LockMethod() {

}

}

class Test {

public void LockMethod() {

synchronized (Test.class)

{

}

}

}

class Test {

private final static Object lock = new Object();

public void LockMethod() {

synchronized (lock) {

}

}

}

在這里我主要是看到了上述第二種形式中所使用的鎖定對象,由于java和C#語法大多相似,但是這在C#中找不到可對比的東西,我不明白這到底是什么個意思,所以就深入看了些,本以為可以直接查看源碼,然而并沒有任何反應,看來就是Java中天然存在的了,我去打印發現和獲取實例的類名的結果是一樣的,我們將這種情況翻譯為className.class,這到底是什么意思呢?為何上述第二種形式就是類級別鎖定從而保證線程安全了呢?

System.out.println(Test.class.toString());

System.out.println(new Test().getClass());

于是乎我想到看一下所購買的《深入理解Java虛擬機》中對于類加載原理的解釋,結果發現:在類加載時機的第一階段也就是加載階段,虛擬機會完成3件事情,其中最后一件事情則是在內存中生成一個對應類的java.lang.Class對象,作為方法區這個類的各種數據的入口。換句話說,每個類在JVM中有且只會有唯一的一個java.lang.Class對象實例,所以我大膽猜測className.class就是獲取java.lang.Class對象唯一實例的引用,如此一來就保證始終只有一個線程能夠進入同步塊。

總結

本節我們通過對關鍵字synchronized實現線程同步做了詳細了解,其實并不難,這里我想表達的是看到和C#中不一樣的東西,也就是className.class具體是什么意思,同時在用java實現單例模式中也有這種情況,所以詳細學習了下,也做個備忘錄,可能對大部分學java的童鞋而言確實很簡單,我還是處于初級階段,也是在一步步深入的學習。

關于找一找教程網

本站文章僅代表作者觀點,不代表本站立場,所有文章非營利性免費分享。

本站提供了軟件編程、網站開發技術、服務器運維、人工智能等等IT技術文章,希望廣大程序員努力學習,讓我們用科技改變世界。

[對象級別鎖 vs 類級別鎖(Java)]http://www.zyiz.net/tech/detail-110240.html

總結

以上是生活随笔為你收集整理的java查看对象锁级别_对象级别锁 vs 类级别锁(Java)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。