int mark = value1;int position = value2;public classType reset() { int m = mark; if (m < 0) throw new Exception();
position = m; return this;
}疑問:為什么將mark賦值給新的臨時變量,而不是像下面這樣:int mark = value1;int position = value2;public classType reset() { if (mark < 0) throw new Exception();
position = mark; return this;
}我的想法:單純就是用m比用mark來得更簡潔防止mark的值在返回之前被修改了(注:該類不是thread safe的這不是個問題清楚的朋友麻煩給下意見,謝謝啦
1 回答

慕姐4208626
TA貢獻1852條經驗 獲得超7個贊
個人傾向于第2點。 不是thread safe只是說不保證線程安全,但是為安全性做一點點額外的努力還是有好處的。 比如能夠改善內部狀態的一致性:雖然無法保證mark和position的完全一致,但至少可以做到在調用reset時的mark和最終的position是一致的,不至于出現 這種一致性的改善雖然不能夠讓程序能夠在多線程下面跑,但卻有以下好處: 有利于調試。就像前面說的,position始終是滿足非負約束的,在任何情況下你都不會收到一個關于position的range exception。否則,position的這種約束將無法保證,當你reset時未報錯,但未來某個時刻調用了某個用到position的方法時卻收到了一個range exception錯誤,那時候要找到是哪個地方改變了position都要花費一番功夫了 可以提高多線程下的安全性。甚至在很多競爭不激烈的情況下,即使誤用了多線程,也有可能不會出錯。這就像一個簡單的密碼行李箱上的密碼鎖,它是不安全的,如果你的行李箱被偷了,小偷可以有一千種方法打開箱子;但是它又是相對安全的,至少沒人可以在你短暫離開或小睡一會的時候偷你東西。調用時的mark大于等于0,但最終position卻變成小于0
這種嚴重不一致的情況。
添加回答
舉報
0/150
提交
取消