在旧客户端请求完成servlet中的执行之前,有没有办法停止对servlet的新客户端请求?我不想使用synchronized
关键字,而是想要识别servlet中的每个请求线程。我怎样才能做到这一点?
答案 0 :(得分:0)
我希望你能想到的是什么?
编辑: 它必须是正确的背景。我的Servlet时间在很久以前...我猜ApplicationContext? - 不确定,但你应该能够自己找到它。
答案 1 :(得分:0)
在servlet或过滤器中使用synchronized关键字。在servlet方法中,您可以编写:
synchronized(this) { //code handling the request that will be executed //by only one thread/request at a time }
您可以使用一个为您提供同步的对象(根据您的需要) - 请参阅java.util.concurrent
您可以尝试使用算法进行线程同步,而无需使用基元。 (CS类通常会告诉这些算法)
您可以尝试将服务器配置为按顺序执行请求。 请参阅http://tomcat.apache.org/tomcat-6.0-doc/config/executor.html
答案 2 :(得分:0)
在同步块中的servletcontext中保留AtomicBoolean / volatile可以达到效果。另一种方法是使用SingleThreadModel接口(不建议使用),但仍然可以使用Job。
我仍然想知道你为什么要这样做。
您可以在Web应用程序代码(servlet等)中使用assert。但请确保使用-ea或相应的控制断言的参数启动Web / app服务器。