java - 这种单例线程的实现是否安全、无序列化问题且性能良好?
问题描述
我有一个将其当前状态保存在枚举中的单例。我想确保这个实现是线程安全的,没有序列化问题并且是高性能的。它用于中央配置并在运行时动态更改配置。请任何人指出您可以找到的任何问题。我意识到同步块可能会减慢对内部枚举值的访问。
set 操作并不经常调用,可能一天一次,但 get 操作每小时调用 200-600 次。
我尝试使用访问枚举中的值和设置值的不同线程运行它。
import java.io.Serializable;
public class ProviderSingleton implements Serializable {
private static final long serialVersionUID = -6827317560255793250L;
private static volatile EmailProvider emailProvider;
private static ProviderSingleton instance = new ProviderSingleton();
private ProviderSingleton() {
System.out.println("Singleton(): Initializing Instance");
emailProvider = EmailProvider.SMTP; // the default
}
public static ProviderSingleton getInstance() {
return instance;
}
public String getEmailProvider() {
synchronized (ProviderSingleton.class) {
return emailProvider.name().toString();
}
}
public void setEmailProvider(String emailProviderValue) {
synchronized (ProviderSingleton.class) {
emailProvider = EmailProvider.valueOf(emailProviderValue);
}
}
// This method is called immediately after an object of this class is
// deserialized.This method returns the singleton instance.
protected ProviderSingleton readResolve() {
return getInstance();
}
enum EmailProvider {
SMTP, POP3;
}
}
我想通过代码示例指出问题或提出改进建议。
解决方案
推荐阅读
- android - USB issue when building a Unity project into an android device
- python - 使用 python 烧瓶框架 render_template 在 CSS 文件中设置背景图像
- java - 在 Cordova FirebaseX 插件上添加自动清除通知
- javascript - 未应用具有计算属性的 VueJS 样式
- python - 如何将 MNIST 训练图像从 (60000, 28, 28) 重塑为 (60000, 16, 16)?
- .htaccess - 将所有 down.php?name=iptools.online 扩展重定向到 .html
- php - 在 PHP 中返回数组的多个值
- reactjs - 如何将 ReactHowler 与播放列表一起使用
- ldap - LDAP / SASL Client "unable to canonify user and get auxprops"
- twilio - Twilio Voice - 允许当前呼叫者收听前一个呼叫者录制的语音邮件