可以说我的servlet中有这样的代码:

private static final String RESOURCE_URL_PATTERN = "resourceUrlPattern";
private static final String PARAM_SEPARATOR = "|";

private List<String> resourcePatterns;

@Override
public void init() throws ServletException {
    String resourcePatterns = getInitParameter(RESOURCE_URL_PATTERN);
    this.resourcePatterns = com.google.common.base.Splitter.on(PARAM_SEPARATOR).trimResults().splitToList(resourcePatterns);
}


如果永远不会修改该线程,使用'resourcePatterns'是否安全?

可以这样说:

private boolean isValidRequest(String servletPath) {
    for (String resourcePattern : resourcePatterns) {
        if (servletPath.matches(resourcePattern)) {
            return true;
        }
    }
    return false;
}


在这种情况下,我应该使用CopyOnWriteArrayList还是ArrayList可以?

最佳答案

是的,只要不写任何内容,可以同时从多个线程读取List。

有关此内容的更多详细信息,请参见this answer,对此进行了进一步说明。有一些重要的陷阱。

10-06 03:01