您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Java中的线程安全多态

Java中的线程安全多态

这将为你提供Multitons的线程安全存储机制。唯一的缺点是可以创建在putIfAbsent()调用中不使用的Multiton。可能性很小,但确实存在。当然,尽管确实有发生,但仍不会造成任何伤害。

从好的方面来说,不需要预分配或初始化,也没有预定义的大小限制。

private static ConcurrentHashMap<Integer, Multiton> instances = new ConcurrentHashMap<Integer, Multiton>();

public static Multiton getInstance(int which) 
{
    Multiton result = instances.get(which);

    if (result == null) 
    {
        Multiton m = new Multiton(...);
        result = instances.putIfAbsent(which, m);

        if (result == null)
            result = m;
    }

    return result;
}

使用Java 8,它甚至可以更简单:

public class Multiton {
    private static final ConcurrentMap<String, Multiton> multitons = new ConcurrentHashMap<>();

    private final String key;
    private Multiton(String key) { this.key = key; }

    public static Multiton getInstance(final String key) {
        return multitons.computeIfAbsent(key, Multiton::new);
    }
}
java 2022/1/1 18:16:42 有695人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶