java - 共享线程访问 servlet 中的数组。使用哪个实现?

标签 java servlets concurrency

假设我的 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/

相关文章:

java - 在 Spring-MVC 中,如何动态设置 session 属性的构造函数参数?

Java的ByteBuffer比较: Comparing a byte to itself "For float and double"?

java - 为 POI 生成的 Excel 文件中的单元格添加边框

没有servlet的Java网页?

c - 测试并发数据结构

java - 与标志中的逻辑运算符一起使用的两个枚举的平方

java - out.write() 和 out.print() 之间的确切区别是什么

java - 为什么阻塞而不是循环?

java - 更新 map 并阅读时锁定免费解决方案

java - 无法让 getOutputStream() 在 servlet 中工作