java中static是不安全的對嗎?那麼static是不是必要和final結合使用?有沒有相關規範?

時間 2021-05-30 04:10:58

1樓:

舉個容易理解的例子:

我會吃牛肉,

牛肉可能會有致病病毒,

病毒會導致我生病,

所以,吃牛肉和我會生病有關。

吃牛肉我一定會生病嗎?

我生病一定是因為吃牛肉嗎?

SmfUtil類中有乙個變數smf被static修飾,被static修飾的smf可能會被多執行緒同時訪問,被多執行緒訪問所以smf會發生執行緒安全問題(在此例看來)所以,static和執行緒安全有關

static一定會影響執行緒安全性嗎?

執行緒安全一定是static引發的嗎?

說到底,就是LZ對於兩間事情抓住了一條關聯線提出來了而已嘛,就是過分鑽牛角尖了。有關係,但是沒有必然的關係。看了其他人(反駁LZ的)的回答,本人認為哈,其他答者其實把關係定義為了有必然的因果原因,有因必有果,才有關係,而LZ就是單純的把兩件事情合理的聯絡起來了,所以認為有了關係

結論:static與執行緒安全性,在有因必有果的關係定義下,是沒有關係的;在如果只是簡單的把兩件事情按照合理的邏輯聯絡起來,他確實有關係~~~(我真的覺得這個話題的根本不是程式設計問題,應該是邏輯語義問題23333)

哈哈,如果我誤解歪曲了LZ和其他答者的意思,請提出來哈~不喜勿噴~

2樓:金自翔

final 用在屬性上是指這個屬性的引用不能被修改(初始化那次不算),一般Immutable物件(比如String)的屬性都會用final 修飾 (Immutable物件的屬性/狀態都是不能修改的),Immutable物件自身都是唯讀的,唯讀的用final沒問題。

至於執行緒安全,首先要明確的是唯讀操作(不修改目標物件屬性) 天然是執行緒安全的,只有寫操作才會執行緒不安全。從這個角度來說,如果被操作的物件是Immutable的(比如String),那天然就是執行緒安全的;如果被操作的物件不是Immutable的,那就需要加鎖了。加鎖可以在被操作的物件內部,也可以在外部。

如果被操作的物件內部加了鎖(比如HashTable), 那這個物件就是個執行緒安全的物件,呼叫者不用考慮同步問題;如果被操作的物件內部沒有加鎖(比如HashMap或者SimapleDataFormat)那就要呼叫者自己同步問題了。

3樓:

先回答問題:

static和執行緒安全性有關;

static不能保證修飾變數的執行緒安全性;

static和final 配合使用沒有嚴格的規定,視具體情況而定從問題的描述中感覺對執行緒安全性相關的理解比較混亂。

首先執行緒安全性的定義:多個執行緒訪問乙個物件,不管作業系統如何排程,也不管執行緒如何交替執行,在不使用同步機制的情況下操作這個物件,這個物件的不變性條件仍然不會被破壞,那麼稱這個物件是執行緒安全的。例如jdk 1.

5開始提供的concurrent包裡的集合工具類都是執行緒安全的,可以滿足上述條件。

所以static不能決定和保證修飾物件是執行緒安全的。

三種方式可以保證物件的執行緒安全性:

物件無共享可變狀態變數

物件是不可變物件且被正確初始化。

使用同步機制保證物件的不變性條件

上邊提到static和final和物件的執行緒安全性有關,因為他們可以保證其所修飾物件安全發布,即保證多執行緒能夠訪問到已經構建完成的物件,而不是構建到一半的物件。

4樓:shaoer fan

看你怎麼用static了啊。

smf是被執行緒共享的例項,你直接呼叫例項方法,所以不安全啊。

你這樣寫,不又安全了。

public static Date format(long time)

5樓:

不能說static是執行緒不安全的,但是可以說使用static會導致執行緒不安全的事情發生對吧。

執行緒安全就是多個執行緒中使用同一例項是否會出問題,如果不使用static部分情況下就可以避免多執行緒使用同一例項,而為每個執行緒新建乙個例項就不會出現執行緒不安全的問題,對吧

速溶咖啡不安全嗎?

哭到失控 一般每天喝兩三杯咖啡都是沒有問題的,而且還有許多好處。首先可以讓自己有飽滿的精神面對學習和工作,還能促發多巴胺的產生,讓心情變好並且減輕精神上的壓力。中午喝完咖啡之後小憩一會午睡質量更佳 像我現在每天都會喝兩三杯摩可納,早上配早餐喝一杯,午睡前也會喝一杯,感覺工作的時候大腦更活躍,工作效率...

Windows 為什麼不安全?

我是老王 Windows安全嗎,系統本身很安全,而且相當安全,地球上最安全的系統之一,但是在安全的系統也架不住一群業餘選手折騰啊,比如天天拿著超級管理員賬戶使用,或者管理員賬戶使用,這相當於linux天天用root,當然root的權利大過windows的超級管理員,但是如何形容這個事情呢,就相當於那...

洗牙到底安全不安全?

骨性矯正劉至恆 在上海,洗牙的所有器械都是經過高溫消毒,並且保證一人一消毒的政策。衛監也會每個月不定時的抽查,所以洗牙是很安全的。醫生建議每人至少半年到1年洗一次牙。 笑顏網 洗牙安不安全?答案是肯定的。洗牙可以說是最有效也是最省錢的口腔護理辦法了,洗牙不僅可以有效的去除牙結石 牙菌斑 色漬 菸漬,...