由于枚舉的值是單例的,在BussinessException中直接傳入枚舉實(shí)例并修改,可能會(huì)有并發(fā)問題吧?
由于枚舉的值是單例的,如果在一個(gè)BussinessException傳入枚舉,再執(zhí)行setErrMsg修改錯(cuò)誤信息。那么在不同線程里所有引用這個(gè)枚舉的BussinessException中的ErrMsg都會(huì)改變。
由于枚舉的值是單例的,如果在一個(gè)BussinessException傳入枚舉,再執(zhí)行setErrMsg修改錯(cuò)誤信息。那么在不同線程里所有引用這個(gè)枚舉的BussinessException中的ErrMsg都會(huì)改變。
舉報(bào)
2020-08-29
setErrMsg這個(gè)方法是有問題的。
假設(shè)第一次調(diào)用方法get,返回”用戶id錯(cuò)誤“消息,第二次調(diào)用getDefaultMsg方法期望返回“參數(shù)錯(cuò)誤”這條消息,由于枚舉類是單例的,所以在get修改EmBusinessError.PARAMETER_VALIDATION_ERROR的屬性后,getDefaultMsg方法還是返回”用戶id錯(cuò)誤“消息。
2020-07-20
有的吧 通過枚舉創(chuàng)建的通用錯(cuò)誤類型是單列的啊? 并發(fā)下都調(diào)用setErrmsg就有并發(fā)問題 沒毛病的
2019-08-01
這里改的是局部變量吧,沒有并發(fā)問題
2019-06-27
反編譯枚舉類就知道,枚舉類的成員變量都是用static final來(lái)修飾的,這樣修改絕對(duì)存在線程安全問題,建議msg不要在這里修改
2019-03-28
你怎么修改枚舉中的屬性?反射?你要用反射那有什么會(huì)是安全的?
2019-03-28
抱歉,我說錯(cuò)了。枚舉不是單例,枚舉里面可以定義多個(gè)值,每個(gè)值都是一個(gè)實(shí)例,但是這些枚舉值是單例的。用枚舉實(shí)現(xiàn)單例模式也是利用它的值只實(shí)例化一次這個(gè)特性。
在這個(gè)視頻教程中,創(chuàng)建了一個(gè)枚舉,枚舉定義了多個(gè)值,又定義了兩個(gè)枚舉屬性code,errMsg。
教程中,在使用某個(gè)枚舉值的時(shí)候,修改了枚舉的屬性errMsg。這樣是不是有線程安全問題?
2019-03-28
枚舉是實(shí)現(xiàn)單例模式的一種方式,但不代表枚舉就是單例模式。由于枚舉和單例很像,都是將構(gòu)造方法私有化,且不用考慮序列化的問題。
多線程并發(fā)問題,把Singleton聲明成volatile,