java - java中带有初始化参数的并发安全单例

标签 java design-patterns concurrency

我想制作一个单例类Phone,这样它就可以初始化(用数字)并且并发安全。所以,这就是我带来的:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;


public class PhoneTest {
    public static void main(String... args){
        System.out.println(Phone.getInstance().getNumber());
    }

    static final class Phone {
        private final String number;
        private final static Phone instance;
        static {
            instance = new Phone(PhonePropertyReader.readPhoneNumber());
        }

        private Phone(String number) {
            this.number = number;
        }

        public static Phone getInstance() {
            if (instance == null) throw 
                new IllegalStateException("instance was not initialized");
            return instance;
        }

        public String getNumber() {
            return number;
        }
    }


    static final class PhonePropertyReader {
        static String readPhoneNumber() {
            File file = new File("phone.properties");
            String phone = "";
            System.out.println(file.getAbsolutePath());
            if (!file.exists()) {
                return phone = "555-0-101";
            }

            try {
                BufferedReader r = new BufferedReader(new FileReader(file));
                phone = r.readLine().split("=")[1].trim();
                r.close();
            } catch (IOException e) {

            }
            return phone;
        }
    }
}

我还有一个文件phone.properties,其中包含

phone=12345

这是一个好的解决方案吗?并发安全吗?

最佳答案

我相信Enum仍然是在 java 中实现线程安全单例的最佳方式。

关于java - java中带有初始化参数的并发安全单例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16001933/

相关文章:

java - 在 Java 中将字符串转换为不同类型的良好设计

ios - Swift 3 DispatchGroup单次成功DispatchWorkItem

java - "Transform variable into final one element array"。 RecyclerView 滚动监听器出现错误

java - 调用父类(super class)构造函数和方法时的异常处理

ruby-on-rails - 干燥开始-救援-结束

使用 java.util.concurrent 语义的 Java 并发支持

java - String.endsWith 的 StringBuffer 替代品是什么?

java - 日期在java应用程序中回流

Java导入不公开的自定义类

java - 在多个 if 语句中调用正则表达式检查方法时使用哪种模式或方法?