[英]Integer assignment in multi-threaded environment java
讀取和寫入操作以引用變量和原始變量在java中是原子的。
說我有以下課程:
public class Example{
private int k;
public void setK(int k){
this.k = k;
}
}
據我所知,它是一個線程安全的,因為整數賦值是原子的。 可見性呢? 當一個線程更新k時,它意味着其他thead會看到更新的值嗎?
謝謝你的推薦
它既不是線程安全的,也不是從一個線程到另一個線程建立可見性。 它不是線程安全的,因為this.k = k;
是一個讀寫操作。 為了建立后者,您可以將變量聲明為volatile
。 在這種情況下,您還可以使用AtomicInteger
。
據我所知,這是一個線程安全,因為......
如果你已經向我們展示了整個Example
類,那么它絕對是線程安全的。 您的類是線程安全的,因為它沒有公開可見的狀態。
如果來自多個線程的重疊方法調用無法將類或其任何實例置於錯誤狀態,則類是“線程安全的”。 您的Example
類無法進入錯誤狀態,因為它不會發布任何狀態:該類只有一個方法, e.setK(int)
,但該方法對客戶端代碼可以看到的任何內容都沒有影響。
另一方面,如果你只向我們展示了Example
類的一部分,那么任何人都無法說出該類是否是線程安全的。 我們必須看到班上的其他人。 除了k
之外還有其他領域嗎? 他們之間有什么關系? 有哪些方法的行為取決於k
的值? 你們班級的API合同對於一個實例如何針對不同的k
值表現出什么樣的承諾呢?
沒有這些信息,我們甚至無法開始討論線程安全問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.