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
提交
取消
