考虑在会话中设置的User
对象。
其中一个对象属性是动态设置的,如下所示:
public class User() {
private String FirstName;
private String LastName;
private Car car;
//Here we have the service object, this could be injected with spring or JEE
private CarServices carServices;
public Car getCar() {
//If the car is not fetched yet, go on and get it from your service
if (car == null) {
car = carServices.getCarFromDB(...)
}
return car;
}
}
getCar()
应该同步吗?!
如果您想了解有关此设计的更多信息,请参阅Design a Java POJO with lazy loading property
答案 0 :(得分:2)
简短回答:是的。如果同一用户(拥有会话的用户)同时发出多个请求,则会话中的User
对象可能会被多个线程访问。
如果您不关心可能多次加载汽车,可能会导致car
不稳定:
private volatile Car car;
或者,您当然可以同步整个方法。在这种情况下并行访问的可能性不大,因此无论如何都不应对性能产生重大影响。