簡體   English   中英

為什么同步關鍵字不與原始變量一起使用。 僅與方法和同步塊一起使用

[英]Why synchronize keyword not use with primitive variable. Use only with method and synchronized block

在Java中,有一個synchronize keyword ,該synchronize keyword用於避免多線程同時訪問方法或syncnize塊。

我的問題是,為什么不將synchronize keyword與原始變量一起使用? 我知道Java不允許使用帶有變量的synced關鍵字。 但是我的問題是,為什么Java不允許帶有變量的syncnize關鍵字。 如果假設我們使用帶有變量的syncnize關鍵字怎么辦?

基本變量就像int,float等。

例如

int a=1
synchronized(a)

變量本身並不獨立。 它需要一個類來具有一些上下文。 這就是為什么鎖位於類或對象而不是變量上的原因。

您也可以同步變量。

synchronized(myvariable) {
.......
}

您還應該檢查“ volatile”關鍵字。 http://en.wikipedia.org/wiki/Volatile_variable#In_Java

您的意思是說您需要對變量進行同步操作? 就像您想保護對變量(例如,increment,decrement)的操作? Java具有原子API,例如java.util.concurrent.AtomicBoolean等。

使用Atomic Concurrency類的好處是,我們不必擔心在處理整數的每個位置上的同步,並且假定使用鎖定資源的同步效率更高。

我想用變量來表示類字段。 但這不是Java中同步的工作方式。

synchronized塊或方法的目的是防止多個線程同時更改類變量的狀態。 Java同步通過擁有鎖來起作用-如果您具有同步方法,則您正在使用對象的固有鎖,否則必須提供鎖。 如果將字段聲明為synchronized ,這將或多或少通過擁有鎖來強制使用該字段的該類中的所有方法以同步方式工作,這將對性能造成不利影響。

如果要在字段級別上尋找同步保證而不必同步方法,請考慮使用java.util.concurrent.atomic.AtomicInteger Atomic變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM