侧边栏壁纸
  • 累计撰写 793 篇文章
  • 累计创建 1 个标签
  • 累计收到 1 条评论
标签搜索

目 录CONTENT

文章目录

详解

Dettan
2021-04-10 / 0 评论 / 0 点赞 / 144 阅读 / 283 字
温馨提示:
本文最后更新于 2022-07-23,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
线程不安全代码演示:
/**
 * @classDesc: 功能描述:(线程不安全演示)
 */
@WebServlet("/ServletlDemo")
public class ServletlDemo extends HttpServlet {
	private int i = 1;
 
	@Override
	public void init() throws ServletException {
		System.out.println("ServletlDemo...init()");
	}
 
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setCharacterEncoding("utf-8");// 内容编码,防止出现中文乱码
		resp.setContentType("text/html;charset=utf-8");
			// 向浏览器输出内容
			resp.getWriter().write("这是第" + i + "次访问...");
			i++;
	}
 
	@Override
	public void destroy() {
		System.out.println("ServletlDemo...destroy()");
 
	}
}
当用两个浏览器同时访问时,会出现线程不安全问题,两个页面都显示是第一次访问

线程安全代码:(使用synchronized)
@WebServlet("/ServletDemo")
public class ServletDemo extends HttpServlet {
	private int i = 1;
 
	@Override
	public void init() throws ServletException {
		System.out.println("ServletDemo...init()");
	}
 
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.setCharacterEncoding("utf-8");// 内容编码,防止出现中文乱码
		resp.setContentType("text/html;charset=utf-8");
		synchronized (ServetlDemo.class) {
			// 向浏览器输出内容
			resp.getWriter().write("这是第" + i + "次访问...");
			try {
				Thread.sleep(5000);
			} catch (Exception e) {
			}
			i++;
		}
	}
 
	@Override
	public void destroy() {
		System.out.println("ServletDemo...destroy()");
	}
}
0

评论区