请您建议以下流程是否是线程安全的 -
Web应用程序获取请求 - >从请求中获取数据 - >处理它 - >写入临时文件 - >临时文件进入批处理过程,在db。中插入数据。
我担心的是,当多个请求同时发生时,在临时文件上写入将是线程安全的。
对于任何建议,我都会非常高兴。
P.S。 - Web应用程序本身并未插入数据,但批处理过程是因为批处理与db的接口已经过充分验证和测试(有点遗留应用程序)。
答案 0 :(得分:2)
Java Web应用程序服务器对传入请求进行排队,并创建一个工作线程池来处理它们。应用服务器从池中分配一个线程来处理队列头部的请求,因此用于处理该请求的代码从其角度来看似乎是单线程的。
但是服务器本身是多线程的,因为它使用了一个线程池。不同线程共享的数据或文件不是线程安全的。因此,您必须同步处理写入文件的代码部分或在写入操作期间锁定它。
如果未共享临时文件,则表示您没有问题。您是否为每个请求创建了一个文件?
答案 1 :(得分:1)
如果你可以保证你的临时文件有唯一的名称,并且每个请求创建它自己的临时文件,那么我会说它是线程安全的(当然假设servlet中的处理也是线程安全的。)
答案 2 :(得分:1)
如果使用synchronized方法写入临时文件(如果它是每个请求中的同一文件)。它非常类似于将线程安全写入套接字。