同步访问相同文件,并发访问不同文件
Synchronising access to the same files, concurrent access to different files
我正在编写一个 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
}
}
}
在这里,所有请求的文件都以同步方式访问。但我希望以并发方式访问不同的文件。
创建 class 实现 Thread
class 或扩展 Runnable
文件访问接口。然后,使用 class 创建多个线程并在每个线程上调用 join()
以同时执行所有任务。
或者您可以使用:
Map<Type, Type> map = new ConcurrentHashMap<Type, Type>();
// 即 thread-safe 访问资源。
我正在编写一个 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
}
}
}
在这里,所有请求的文件都以同步方式访问。但我希望以并发方式访问不同的文件。
创建 class 实现 Thread
class 或扩展 Runnable
文件访问接口。然后,使用 class 创建多个线程并在每个线程上调用 join()
以同时执行所有任务。
或者您可以使用:
Map<Type, Type> map = new ConcurrentHashMap<Type, Type>();
// 即 thread-safe 访问资源。