您能否告诉我们如何在 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/