我为用户提供了编辑数据库中文件的选项。但我不想同时对同一个文件进行多次编辑,因此为了防止这种情况,我在服务器端使用了静态链接列表。当客户端向服务器发送更新文件的请求时,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,这样即使发生任何异常,文件名也会从列表中删除。否则该文件将永远不可编辑。我知道这不是最好的方法,但我想知道是否有任何条件会导致链表失败或者是否有更好的解决方案???
预先感谢您的任何帮助或建议...
最佳答案
几点。
LinkedList
不是线程安全的。搜索时间也是线性的。您可能需要考虑ConcurrentHashMap。不执行list.add()
,而是执行ConcurrentMap.putIfAbsent()
并检查返回的值。人们可能会通过不同的路径,例如绝对路径与相对路径都指向同一个实际文件。因此,最好在持有结构中使用
File
对象而不是字符串。我猜您想要执行
list.remove(file)
,无论更新是否成功。因此,您需要将其放入finally
block 中。
关于java - 在服务器端使用静态 LinkedList 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23648992/