java - 如何使java类线程安全?

标签 java multithreading thread-safety

我有一个java类如下

 class User {

    String name;
    String phone;

    public String getName() {
        return name;
    }

    public String getPhone() {
        return phone;
    }

}

这个类的使用方式是,为每个线程创建这个 User 类的 1 个对象。现在由于每个线程都有一个对象副本,我可以将此类称为线程安全的吗?

我需要同步这些方法吗?

最佳答案

按照您介绍的方式,如果每个线程都有一个副本,那么它可以称为线程安全的,因为访问线程的最大值是一个。

另一件事 - 如果您将字段声明为 private 并将该类的实例创建为 final,那么它是不可变的(final User user = new User (...))。没有 setter ,因此无法修改对象,也无法更改其引用。如果您想保持不变性,则必须让 setter 返回此对象的一个​​新实例,该实例具有已更改的字段。

@markspace 注意到,更好的方法是将字段声明为 final,因为如果您使用前一个字段并使 User 成为某个类的成员,它将不起作用(除非是 final) .

关于java - 如何使java类线程安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55134811/

相关文章:

java - Spring 启动 : Autowired fields are none

java - 父线程在它们退出 servlet 容器之前是否等待子线程退出?

c++ - std::vector - 线程安全和调整大小选项

java - 远程编译和执行Java

java - 验证不同的验证组 JSF 2.0

java - 如何使用新配置停止和启动线程?

c# - 为什么 Interlocked.CompareExchange<T> 只支持引用类型?

node.js - 在管理器/ worker 模式中使用子进程以确保线程安全时,Node.js 中是否需要锁定?

multithreading - 基于静态状态的回收与基于时代的回收

java - 由于多个可能的 bean,Spring Boot Autowiring 泛型失败