import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Time;import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/**
* Servlet implementation class CallServlet
*/
public class CallServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private Integer a=new Integer(0);
/**
* @see HttpServlet#HttpServlet()
*/
public CallServlet() {
super();
// TODO Auto-generated constructor stub
} protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stuba
int c=0;
int b=0;
synchronized (a){a++;c=a;try {
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}b=a;}
response.setContentType("text/html;charest=gb2312");
request.setCharacterEncoding("gb2312");
response.setCharacterEncoding("gb2312");
PrintWriter out=response.getWriter();
out.println("<html><head>");
out.println("<title>times</title>");
out.println("</head><body>");
out.println("<center>"+a+b+c+"</center>");
out.println("</body>");
out.println("</html>");
}}我开两个 网页 4秒内 先后 刷新,结果:一个332 一个333
一个页面的结果是332 说明 在sleep前 a=2,sleep后a=3了 而那个sleep的时间 我刷新了另一个页面就是333
sleep 不是在同步语句块里面吗? 当第二个页面要执行a++的时候 不应该要先得到a的对象锁吗? 第一个页面仍在同步语句块中,他没放掉a的对象锁啊 .第二个页面怎么执行a++呢.
这是怎么回事?
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货