【问题标题】:managing a resource in webapplication's multithreaded environment在 web 应用程序的多线程环境中管理资源
【发布时间】:2011-04-20 11:28:13
【问题描述】:

您能否建议以下流程是否是线程安全的 -

Web 应用程序获取请求 -> 从请求中获取数据 -> 处理它 -> 写入临时文件 -> 临时文件进入批处理,将数据插入数据库。

我担心的是,当多个请求同时发生时,在临时文件上写入是否是线程安全的。

如果有任何建议,我将非常高兴。

附: - Web 应用程序本身不是插入数据,而是批处理是因为批处理与 db 的接口已经过很好的验证和测试(有点遗留应用程序)。

【问题讨论】:

    标签: java multithreading web-applications


    【解决方案1】:

    Java Web 应用程序服务器将传入请求排队并创建一个工作线程池来处理它们。应用服务器从池中分配一个线程来处理队列头部的请求,因此从它的角度来看,用于处理该请求的代码似乎是单线程的。

    但是服务器本身是多线程的,因为它使用线程池。不同线程共享的数据或文件不是线程安全的。因此,您必须同步处理写入文件的代码部分或在写入操作期间锁定它。

    如果临时文件没有共享,那么你就没有问题。您是否为每个请求创建一个文件?

    【讨论】:

      【解决方案2】:

      如果您可以保证您的临时文件具有唯一的名称,并且每个请求都创建自己的临时文件,那么我会说它是线程安全的(当然假设 servlet 中的处理也是线程安全的。)

      【讨论】:

        【解决方案3】:

        如果您使用同步方法写入临时文件,如果它在每个请求中都是同一个文件。将线程安全地写入套接字非常相似。

        【讨论】:

          猜你喜欢
          • 2021-06-26
          • 2019-10-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-06-24
          • 2013-09-11
          相关资源
          最近更新 更多