帮我提个简单的问题。
这是我的一个简单的例外。
public class MyException extends RuntimeException {
private MyErrors error;
public MyException() {
}
public MyException(String message) {
super(message);
}
public MyException(MyErrors error) {
super(error.getMessage());
this.error = error;
}
}
public class MyService {
...
public String someMethod(String id){
Optional<Prizes> prize = Optional.ofNullable(prizesRepository.findById(id));
if(prize.isPresent()){
return prize.get().getPrize();
}
throw new MyException(ThanksGivenErrors.BadRequest);
}
}
这是使用MyService的MyController
public class MyController{
...
@PostMapping("/prize")
public ResponseEntity findPrize(@RequestParam String id) {
try {
return new ResponseEntity<>(MyService.someMethod(id), HttpStatus.OK);
} catch (MyException e) {
return new ResponseEntity<>(e.getError().getMessage(), HttpStatus.BAD_REQUEST);
}
}
}
MyService是一个Spring bean和单例。
我认为如果在多线程环境中使用MyService并且发生了许多MyException,那么MyException中的“error”字段的值可能会改变。
‘MyException(扩展RuntimeException)’的字段值是线程安全的吗?
我不认为这是安全的。感谢您的教学。
发布于 2018-08-27 04:55:31
RuntimeException从Throwable扩展而来,Throwable既不是线程安全的,也不是不可变的。它有一些改变状态的方法,比如:addSuppressed
https://stackoverflow.com/questions/51959160
复制相似问题