IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:同步

共 1 篇相关文章

IT 累计浏览 5,422

Servlet线程安全问题

这篇讲的是开发中容易踩到的陷阱:Servlet的线程安全问题。文章从Servlet默认的多线程执行模型切入,指出当多个线程并发访问同一个Servlet实例时,如果代码不当,会产生难以复现的bug。 作者用了一个很直观的代码案例:在service方法中使用了一个实例变量PrintWriter。当用户a和b几乎同时请求时,由于线程调度和共享实例变量,用户a的浏览器收到了空白页,而a的信息却错误地显示在了用户b的页面上。文章进而从Java内存模型(JMM)的角度,分析了线程工作内存与主内存的同步延迟,如何导致了这一问题的随机性与危险性。 针对该问题,文章总结了三种解决方案:一是实现SingleThreadModel接口(但已被废弃,且不能解决所有问题);二是使用synchronized关键字同步代码块;最根本的,是避免在Servlet中使用实例变量,将需要的数据作为局部变量处理。这对于理解Web容器如何执行Servlet,以及如何编写可靠的并发代码,都是很好的一课。