如何以线程安全的方式更改单例中的静态变量?

问题描述 投票:0回答:1

我有一个带有多个静态变量的单例类和一个刷新方法来更改它们的值。例如。

Class Singleton {

@Getter(AccessLevel.Protected)
private static Immutable vara;

@Getter(AccessLevel.Protected)
private static Immutable varb;

@Getter(AccessLevel.Protected)
private static Immutable varc;

public void refresh() {
//refreshes the values of vara, varb, varc;
}

在访问变量的服务类中访问此单例类。 如何使刷新线程安全,以便两次访问之间不会发生刷新?例如。 --->访问vara --->刷新--->访问varb。
我的应用程序部署在tomcat上。

java multithreading thread-safety
1个回答
0
投票

保护

static
变量与保护任何其他变量没有什么不同。访问它们时使用
synchronized
块。通常,您会在
synchronize
上锁定在相同范围内声明的对象,并且与您要保护的变量具有相同的范围。例如;
final

如果您正在执行某种复杂的技巧*,而 
static FooType foo; static BarType bar; static BazType baz; // Only access foo, bar, and baz from within synchronized(lock) {...}. final static Object lock = new Object();

不适合您,那么您可能需要加大赌注,并使用

synchronized

*但是,当然,如果您正在计划如此复杂的事情,那么您可能不会在这里问您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.