【发布时间】:2021-01-17 16:22:48
【问题描述】:
使用 Spring Boot,我有一个服务类,它有一个私有字段。通过不同的方法读取和修改该字段。
@Service
...
private int maxPoints
休息控制器使用该服务。恐怕不同的并行休息消费者会导致不同的线程,并且私有变量不是线程安全的。
用弹簧靴和休息装置确保螺纹安全的最佳方法是什么?
【问题讨论】:
标签: java spring-boot rest
使用 Spring Boot,我有一个服务类,它有一个私有字段。通过不同的方法读取和修改该字段。
@Service
...
private int maxPoints
休息控制器使用该服务。恐怕不同的并行休息消费者会导致不同的线程,并且私有变量不是线程安全的。
用弹簧靴和休息装置确保螺纹安全的最佳方法是什么?
【问题讨论】:
标签: java spring-boot rest
默认情况下,您的服务被实例化为单例,这意味着在您的应用程序生命周期内您将只有一个该服务的实例。
为了使“maxPoints”线程安全,您需要确保使用“maxPoints”的方法是线程安全的。最简单的方法是使用“同步”。 Java 中的同步块一次只能执行一个线程。
public synchronized void changeMaxPoints() {
...
// change maxPoints
...
}
第二种方法是使用AtomicInteger。
【讨论】: