java - 在服务器端使用静态 LinkedList 安全吗?

标签 java servlets linked-list

我为用户提供了编辑数据库中文件的选项。但我不想同时对同一个文件进行多次编辑,因此为了防止这种情况,我在服务器端使用了静态链接列表。当客户端向服务器发送更新文件的请求时,LinkedList.contain(filename) 将检查文件名是否存在于列表中。如果它不存在,那么它将添加它并允许更新,否则它只会在发生错误时返回响应。代码如下:

public class UpdateFileServlet extends HttpServlet{

    private static List<String> List= new LinkedList<String>();
        @Override
        public void doPost(HttpServletRequest req, HttpServletResponse res)
                    throws ServletException, IOException {
            String file=req.getHeader("FileName");
            if(List.contains(file)){
                res.getWriter().write("Error");
                res.flushBuffer();
                return;
            }
            List.add(file);
            try{
            //do the file update;

                List.remove(file);

            }catch (Exception e1) {
                List.remove(file);
                e1.printStackTrace();
            }
        }
    }
}

我还添加了 try/catch,这样即使发生任何异常,文件名也会从列表中删除。否则该文件将永远不可编辑。我知道这不是最好的方法,但我想知道是否有任何条件会导致链表失败或者是否有更好的解决方案???

预先感谢您的任何帮助或建议...

最佳答案

几点。

  1. LinkedList 不是线程安全的。搜索时间也是线性的。您可能需要考虑ConcurrentHashMap。不执行 list.add(),而是执行 ConcurrentMap.putIfAbsent() 并检查返回的值。

  2. 人们可能会通过不同的路径,例如绝对路径与相对路径都指向同一个实际文件。因此,最好在持有结构中使用 File 对象而不是字符串。

  3. 我猜您想要执行list.remove(file),无论更新是否成功。因此,您需要将其放入 finally block 中。

关于java - 在服务器端使用静态 LinkedList 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23648992/

相关文章:

java - 在 java 中用于 jsp web 应用程序的文件路径的完整路径声明

java - 这是缓存关闭线程保存吗?

c - 在C中访问链表的第一个节点

java - 我的代码中的嵌套开关有什么问题?

c++ - 显示多值链表

java - 如何使用逗号和换行符解析 .text 文件

java - 企业级排队/消息系统何时取代更简单的工作流程管理系统?

java - 未从项目单击监听器上的 gridview 获取所有图像

java - 使用 Socket 将 Android 应用程序(带 Flex)连接到 Java 服务器?

java - 如何对 servlet 进行单元测试?