根据客户端的请求,我正在编写一个servlet程序来访问要写入的文件。该请求包含文件名。假设同时发出3个请求。如果其中两个请求同一个文件,则必须以同步方式访问该文件,即,仅在完成服务任何一个请求之后,才可以服务下一个请求。如果第三个请求也是在同一时间发出的,则请求另一个文件名,则它必须与另一个请求同时提供。如何处理这种同时和同时访问文件的情况?
我尝试使用同步块打开文件。但这不允许并发访问具有不同文件名的请求。
public class FileServlet extends HttpServlet{
String FileName="";
public void service(HttpServletRequest req, HttpServletResponse res) throws IOException
{
FileName = req.getParameter("file");
synchronized(FileName){
//writing on fileName
}
}
}
在此,以同步方式访问所有请求的文件。但我希望以并发方式访问不同的文件。
答案 0 :(得分:0)
创建用于实现Thread
类或扩展Runnable
接口以进行文件访问的类。然后,使用该类创建多个线程,并在每个线程上调用join()
以同时执行所有任务。
或者您可以使用:
Map<Type, Type> map = new ConcurrentHashMap<Type, Type>();
//这是线程安全的,可以访问资源。