小编Xep*_*nia的帖子

类中的静态字段初始化序列

当一个类有自己的静态实例时,我无法理解初始化顺序.此外,为什么这种行为似乎有所不同String.

请参阅以下示例:

public class StaticCheck {
    private static StaticCheck INSTANCE = new StaticCheck();    

    private static final List<String> list =
        new ArrayList<String>(Arrays.asList("hello"));
    private static final Map<String, String> map =
        new HashMap<String, String>();  
    private static final  String name = "hello";

    public static StaticCheck getInstance() {
        return INSTANCE;
    }

    private StaticCheck() {
        load();     
    }

    private void load() {
        if(list != null) {
            System.out.println("list is nonnull");
        } else {
            System.out.println("List is null");
        }
        if(name != null) {
            System.out.println("name is nonnull");
        } else …
Run Code Online (Sandbox Code Playgroud)

java static

5
推荐指数
2
解决办法
849
查看次数

使用concurrentHashMap vs Hashmap

 private static final Map<String, SampleClass> map = new
 ConcurrentHashMap<>();

 public static SampleClass getsampleclass(String context) {

     if( map.get(context) != null) {
         return map.get(context);
     } else {
         SampleClass cls = new SampleClass(context);
         map.put(context, cls);
     }
 }
Run Code Online (Sandbox Code Playgroud)

在多线程环境中,如果两个线程获取map.get(context)null,则两个线程都将创建cls,并且put将被阻塞,因此thread1将首先放置,之后thread2将覆盖放置的内容thread1.
这种行为是否正确?
在我的情况下,我想在map.get完成后返回相同的值,因此我看到使用HashMap同步它是首选.

java multithreading

2
推荐指数
1
解决办法
62
查看次数

标签 统计

java ×2

multithreading ×1

static ×1