对于Java,是Class.newInstance()线程安全

时间:2014-01-21 00:49:04

标签: java multithreading

这样的代码的一部分:

class Test {

private static final Map<String, Class> urlHandlers = new ConcurrentHashMap<String, Class>();
static {
    urlHandlers.put(urlRegexA, HandlerA.class);
    urlHandlers.put(urlRegexB, HandlerB.class);
    ...
}
public Handler handle(String url) {
    ......
    if(url match urlRegex) {
        Class claz = urlHandlers.get(urlRegex);
        //in multi-thread environment, is it thread-safe?
        return claz.newInstance();
    }
}
}

我想知道Class.newInstance()是否是线程安全的? 谁知道这个?

2 个答案:

答案 0 :(得分:7)

javadoc states

  

该类被实例化,就像new表达式为空   参数列表。

所以它相当于做

new YourClass();

所以它完全取决于你的YourClass构造函数是否是线程安全的。

答案 1 :(得分:0)

是的,只要构造函数没有对对象的静态内容做任何非线程安全的事情,这就是线程安全的。