识别Servlet中的每个请求线程

时间:2011-10-13 09:07:44

标签: java multithreading servlets

在旧客户端请求完成servlet中的执行之前,有没有办法停止对servlet的新客户端请求?我不想使用synchronized关键字,而是想要识别servlet中的每个请求线程。我怎样才能做到这一点?

3 个答案:

答案 0 :(得分:0)

乍一看,我猜应该可以在上下文中存储一个bool。 任何到达的请求都会检查context-bool(我们将其命名为“bBusy”)。 第一个到达的请求设置它并在处理完成后重置它。 第二个到达的人检查:如果第一个仍然被处理,它将被识别,然后由你的幻想决定发生什么...... :)

我希望你能想到的是什么?

编辑: 它必须是正确的背景。我的Servlet时间在很久以前...我猜ApplicationContext? - 不确定,但你应该能够自己找到它。

答案 1 :(得分:0)

  1. 在servlet或过滤器中使用synchronized关键字。在servlet方法中,您可以编写:

    synchronized(this) {
       //code handling the request that will be executed 
       //by only one thread/request at a time
    }
    

  2. 您可以使用一个为您提供同步的对象(根据您的需要) - 请参阅java.util.concurrent

  3. 您可以尝试使用算法进行线程同步,而无需使用基元。 (CS类通常会告诉这些算法)

  4. 您可以尝试将服务器配置为按顺序执行请求。 请参阅http://tomcat.apache.org/tomcat-6.0-doc/config/executor.html

答案 2 :(得分:0)

在同步块中的servletcontext中保留AtomicBoolean / volatile可以达到效果。另一种方法是使用SingleThreadModel接口(不建议使用),但仍然可以使用Job。

我仍然想知道你为什么要这样做。

您可以在Web应用程序代码(servlet等)中使用assert。但请确保使用-ea或相应的控制断言的参数启动Web / app服务器。