The way you presented it, if each thread has its one copy, then it can be called thread-safe, as maximum of accessing threads is one.
Another thing - if you declare your fields as
private and create the instance of that class as
final, then it's immutable (
final User user = new User(...)). There are no setters, so the object cannot be modified as well as it cannot change its reference. If you wanted to keep the immutability, you would have to make setters return a new instance of this object with changed fields.
@markspace noticed, that better approach would be to declare fields as final, because if you use the previous one and make
User a member of some class, it won't work (unless final).