java - 在 servlet 中创建死锁的方法

标签 java jakarta-ee servlets

您能否告诉我们如何在 servlet 中创建死锁,我认为这是一种简单的方法,在 doGet() 中调用 doPost() 方法,在 doPost() 中调用 doGet() 方法,它将创建死锁情况对于 servlet。请问还有其他方法吗?

最佳答案

对于每个请求,Web 容器都会创建一个新线程。在我的 servlet 中,我保留了 2 个方法。一种是 doGet,另一种是 doPost。这是我的 servlet 代码

public class DeadLockServlet extends HttpServlet {
       public static Object s = new Object();
       public static Object s1 = new Object();
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        synchronized (s) {
            System.out.println("Got lock of s in get");
            try {
                Thread.sleep(9977);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
      System.out.println("waiting for lock of s1 in get");
        synchronized (s1) {
            System.out.println("Got lock of s1 in get");
        }
        }

    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        synchronized (s1) {
            System.out.println("Got lock of s1 in post");
            try {
                Thread.sleep(9977);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
     System.out.println("waiting for lock of s in post");
        synchronized (s) {
            System.out.println("Got lock of s in  post");
        }
    }}

}

这里是我的 abc.jsp 代码

  <form action="DeadLockServlet" method="post">
    <input type="submit" value='ok'/>
    </form>

我正在从一个浏览器向我的 servlet 发送请求 http://localhost:8090/DeadLockTest/abc.jsp (点击确定按钮时的post方法)。

来自另一个浏览器的另一个请求,例如 http://localhost:8090/DeadLockTest/DeadLockServlet (对于获取方法)。 现在你会得到死锁的情况

关于java - 在 servlet 中创建死锁的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583644/

相关文章:

java - 我如何将 mobicents 部署到 glassfish v3

java - BigDecimal:Java 编译器可以优化乘以 1 的乘法吗?

java - JNLP从相对地址加载jar

java - 如何在 WAR 项目中从 JNDI 正确引用带注释的 EJB3 bean

java - jsp 中的源 javascript 文件与 spring mvc <3.0.4

jsp - JSP页面中的类型安全警告

java - Netbeans GUI Builder - 如何添加自定义表格单元格渲染器?

java - 我正在寻找不使用 Groovy 的 Java 过度冗长的解决方案

java - CacheStoreMode USE 和 REFRESH 有什么区别

Java Web 应用程序 : Passing form parameters across multiple pages