第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

由于枚舉的值是單例的,在BussinessException中直接傳入枚舉實(shí)例并修改,可能會(huì)有并發(fā)問題吧?

由于枚舉的值是單例的,如果在一個(gè)BussinessException傳入枚舉,再執(zhí)行setErrMsg修改錯(cuò)誤信息。那么在不同線程里所有引用這個(gè)枚舉的BussinessException中的ErrMsg都會(huì)改變。

正在回答

7 回答

@RestController
@RequestMapping("/user")
public?class?UserController?{
????
????@GetMapping("/get")
????public?String?get()?{
????????return?EmBusinessError.PARAMETER_VALIDATION_ERROR.setErrMsg("用戶id錯(cuò)誤")
????????????????????.getErrMsg();
????}

????@GetMapping("/getDefaultMsg")
????public?String?getDefaultMsg()?{
????????return?EmBusinessError.PARAMETER_VALIDATION_ERROR.getErrMsg();
????}
}

setErrMsg這個(gè)方法是有問題的。

假設(shè)第一次調(diào)用方法get,返回”用戶id錯(cuò)誤“消息,第二次調(diào)用getDefaultMsg方法期望返回“參數(shù)錯(cuò)誤”這條消息,由于枚舉類是單例的,所以在get修改EmBusinessError.PARAMETER_VALIDATION_ERROR的屬性后,getDefaultMsg方法還是返回”用戶id錯(cuò)誤“消息。

1 回復(fù) 有任何疑惑可以回復(fù)我~

有的吧 通過枚舉創(chuàng)建的通用錯(cuò)誤類型是單列的啊? 并發(fā)下都調(diào)用setErrmsg就有并發(fā)問題 沒毛病的


0 回復(fù) 有任何疑惑可以回復(fù)我~

這里改的是局部變量吧,沒有并發(fā)問題


0 回復(fù) 有任何疑惑可以回復(fù)我~

反編譯枚舉類就知道,枚舉類的成員變量都是用static final來(lái)修飾的,這樣修改絕對(duì)存在線程安全問題,建議msg不要在這里修改

1 回復(fù) 有任何疑惑可以回復(fù)我~
#1

少年啊c

這個(gè)改的是局部變量
2019-08-01 回復(fù) 有任何疑惑可以回復(fù)我~

你怎么修改枚舉中的屬性?反射?你要用反射那有什么會(huì)是安全的?

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

webcat 提問者

枚舉可以有自定義屬性。修改自定義屬性和普通的類一樣的。比如本節(jié)視頻教程中定義的枚舉EmBussinesError
2019-03-28 回復(fù) 有任何疑惑可以回復(fù)我~

抱歉,我說錯(cuò)了。枚舉不是單例,枚舉里面可以定義多個(gè)值,每個(gè)值都是一個(gè)實(shí)例,但是這些枚舉值是單例的。用枚舉實(shí)現(xiàn)單例模式也是利用它的值只實(shí)例化一次這個(gè)特性。

在這個(gè)視頻教程中,創(chuàng)建了一個(gè)枚舉,枚舉定義了多個(gè)值,又定義了兩個(gè)枚舉屬性code,errMsg。

教程中,在使用某個(gè)枚舉值的時(shí)候,修改了枚舉的屬性errMsg。這樣是不是有線程安全問題?

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

sunbohan00

我這是才想起來(lái)有個(gè)問題忘了和你說,你發(fā)的這些東西是回復(fù)你自己,回復(fù)的不是我,如果不是我突然想起一個(gè)問題,我永遠(yuǎn)都不會(huì)看到你的這段話。 第二點(diǎn):課程是5-2里面有的,你為什么提問在3-3。 第三點(diǎn):我剛看到5-2里面,調(diào)用BussinessException的ErrMsg,根本不會(huì)存在你說的問題,首先多個(gè)code提示詞,是在不同判斷下條件下的,其次,每一個(gè)訂單都會(huì)重新調(diào)用這個(gè)方法,不會(huì)遺留code重復(fù)的問題。
2019-03-28 回復(fù) 有任何疑惑可以回復(fù)我~
#2

webcat 提問者 回復(fù) sunbohan00

謝謝你的回復(fù)。每個(gè)訂單都會(huì)重新調(diào)用這個(gè)方法,這個(gè)沒問題,問題在于并發(fā)。如果分別有兩個(gè)用戶同時(shí)去修改同一個(gè)code對(duì)應(yīng)的errMsg,即他們同時(shí)去修改同一個(gè)枚舉值的errMsg,這樣就會(huì)出現(xiàn)后者把前者的errMsg覆蓋。
2019-03-28 回復(fù) 有任何疑惑可以回復(fù)我~

枚舉是實(shí)現(xiàn)單例模式的一種方式,但不代表枚舉就是單例模式。由于枚舉和單例很像,都是將構(gòu)造方法私有化,且不用考慮序列化的問題。

多線程并發(fā)問題,把Singleton聲明成volatile,

0 回復(fù) 有任何疑惑可以回復(fù)我~

舉報(bào)

0/150
提交
取消

由于枚舉的值是單例的,在BussinessException中直接傳入枚舉實(shí)例并修改,可能會(huì)有并發(fā)問題吧?

我要回答 關(guān)注問題
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)