假设我的 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这进一步解释了这一点。有一些重要的问题。
关于java - 共享线程访问 servlet 中的数组。使用哪个实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35120158/