搜尋
首頁Javajava教程Java 中的靜態同步

如果實例的方法是同步的,那麼執行緒的執行就會變成每個實例一個執行緒的執行,但是當同一個類別的實例有多個時,就會出現一個問題,需要在類別層級進行同步,以便只提供Java 中的靜態同步可以透過兩種方式執行,一種是使用靜態同步方法,另一種是使用同步區塊靜態方法中的程式碼。

開始您的免費軟體開發課程

網頁開發、程式語言、軟體測試及其他

文法

文法如下:

synchronized static return_type class_name{}

其中傳回類型是從類別傳回值的類型,class_name 是類別的名稱。

Java 中靜態同步如何運作?

Java中類別的每個實例都對該類別的物件有一個鎖。如果任何靜態方法被同步,那麼鎖就不是在類別的物件上,而是在類別本身上。假設一個類別有兩個對象,分別稱為 obj1 和 obj2,並且線程 t1 和 t2 正在對對象 obj1 進行操作。同樣,線程 t3 和 t4 正在物件 obj2 上進行操作。如果程式碼區塊或方法被同步,則執行緒 t1 和 t2 之間不會存在幹擾,因為執行緒 t1 和 t2 都引用具有單一鎖的同一個物件 obj1。同樣,線程 t3 和 t4 之間也不可能存在幹擾,因為線程 t3 和 t4 都引用具有單鎖的同一個物件 obj2。

但是線程 t1 和 t3 之間可能存在幹擾,因為線程 t1 和 t3 都使用不同的鎖定獲取了不同的物件。同樣,線程t2和t4之間也可能存在幹擾,因為線程t2和t4都獲得了具有不同鎖的不同物件。我們不希望任何執行緒之間出現任何形式的干擾,這個問題可以透過使用 Java 中的靜態同步來解決。當第一次載入類別時,Java 虛擬機會會建立類別物件。第一次載入同一個類別後,不會再載入該類別。 Java 虛擬機器為載入的每個類別建立一個類別的實例。這些類別的實例稱為對象,而物件同步可以使用 Java 中的靜態同步來完成。

在 Java 中實作靜態同步的範例

以下是範例:

範例#1

示範 Java 靜態同步的程式:

代碼:

//a class called check is defined
class check
{
// a method called Line is define and only one thread will be able to access this method at once because it is synchronized
synchronized public void Line()
{
//a for loop is defined to loop from values 0 to 3
for (int r = 1; r 
<p><strong>輸出:</strong></p>
<p><img  src="/static/imghwm/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/172500474663661.jpg?x-oss-process=image/resize,p_40" class="lazy" alt="Java 中的靜態同步" ></p>


<p><strong>說明:</strong>在上面的程式中,定義了一個名為check的類別。然後定義了一個名為 Line 的方法,一次只有一個執行緒能夠存取該方法,因為它是同步的。然後定義一個 for 迴圈從值 0 到 3 迴圈。然後保護一個名為 Trap 的類,它擴展了該類的線程。然後定義了類別check的一個變數。類別陷阱的建構子以檢查類別變數作為參數定義。然後標準運行方法被覆蓋。然後定義一個名為program的類別。然後呼叫main方法。然後定義類別檢查的實例。然後創建類別陷阱的兩個執行緒tra1和tra2,它們共享同一個物件。然後,兩個執行緒tra1和tra2的執行以這樣的方式開始:一個執行緒的執行不中斷另一個執行緒的執行或一個執行緒的執行不鎖定另一個執行緒的執行。程式的輸出如上面的快照所示。 </p>
<h3 id="Java-中靜態同步的優點">Java 中靜態同步的優點</h3>
<p>有幾個優點。他們是:</p>
  • 使用Java中的靜態同步可以解決資料不一致的問題。
  • 透過在Java中使用靜態同步,一個物件在給定的時間點只能被一個執行緒存取。只能由一個執行緒存取的物件必須使用關鍵字synchronized聲明。
  • Java中可以使用靜態同步來管理不同執行緒和不同進程的並發。即兩個或多個線程,或兩個或多個進程可以同時執行,確保一個線程不會鎖定或中斷其他線程的執行。

結論

在本教程中,我們透過定義來了解 Java 中靜態同步的概念、在 Java 中聲明靜態同步的語法、透過範例了解 Java 中靜態同步的工作原理及其輸出以及 Java 中靜態同步的優點。

以上是Java 中的靜態同步的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何使用MapStruct簡化系統對接中的字段映射問題?如何使用MapStruct簡化系統對接中的字段映射問題?Apr 19, 2025 pm 06:21 PM

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

IntelliJ IDEA是如何通過JavaAgent和RMI技術識別Spring Boot項目的端口號的?IntelliJ IDEA是如何通過JavaAgent和RMI技術識別Spring Boot項目的端口號的?Apr 19, 2025 pm 06:18 PM

IntelliJIDEA如何識別SpringBoot項目的端口號?在使用IntelliJIDEAUltimate版本啟動Spring...

高效編程:如何才能找到可靠的代碼工具和資源?高效編程:如何才能找到可靠的代碼工具和資源?Apr 19, 2025 pm 06:15 PM

高效編程:尋找可靠的代碼工具和資源很多程序員都渴望找到便捷的代碼工具網站,以提高效率,避免在海量信...

JWT能否實現動態權限變更?與Session機制有何區別?JWT能否實現動態權限變更?與Session機制有何區別?Apr 19, 2025 pm 06:12 PM

關於JWT和Session的困惑與解答許多初學者在學習JWT和Session時,常常會對其本質和適用場景感到困惑。本文將圍繞J...

Windows Server 2019防火牆如何正確配置才能支持WebSocket通信?Windows Server 2019防火牆如何正確配置才能支持WebSocket通信?Apr 19, 2025 pm 06:09 PM

WindowsServer2019防火牆與WebSocket通信問題詳解在使用SpringBoot開發的Jar程序部署於WindowsServer2019...

Spring Boot子線程如何訪問主線程的請求信息?Spring Boot子線程如何訪問主線程的請求信息?Apr 19, 2025 pm 06:03 PM

SpringBoot子線程無法訪問主線程Request信息解決方案在Spring...

Java單線程下的指令重排序會影響System.out.println的輸出順序嗎?Java單線程下的指令重排序會影響System.out.println的輸出順序嗎?Apr 19, 2025 pm 06:00 PM

Java單線程下的指令重排序與輸出順序在Java編程中,指令重排序是一個常見的優化技術,用於提高程序的執行效�...

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境