您能否建议我们如何在servlet中创建死锁,我想这是在doGet()和doPost()方法中调用doPost()方法和doGet()方法的一种简单方法,它将为servlet创建死锁情况。请告知还有其他方法。

最佳答案

在下面部署servlet并调用几次。

public class DeadLockServlet extends HttpServlet {
       private static long sleepMillis = 10000;
       private final Object lock1 = new Object();
       private final Object lock2 = new Object();

   private boolean switch = true;

   public void doGet(HttpServletRequest req, HttpServletResponse res)  throws ServletException, IOException  {

        if(switch){
            switch=!switch;
            lock12();
        }
        else{
            switch=!switch;
            lock21();
        }
        PrintWriter out = res.getWriter();
        out.println("Done!");
        out.close();
  }

   private void lock12() {
       synchronized (lock1) {
           sleep();
           synchronized (lock2) {
               sleep();
           }
       }
   }

   private void lock21() {
       synchronized (lock2) {
           sleep();
           synchronized (lock1) {
               sleep();
           }
       }
   }

   private void sleep() {
       try {
           Thread.sleep(sleepMillis);
       } catch (InterruptedException e) {
           e.printStackTrace();
       }
   }

}

09-10 00:28
查看更多