servlet生命周期和线程问题
来源:互联网 发布:phpmyadmin软件 编辑:程序博客网 时间:2024/06/05 17:57
Sevlet的四个重要的生命周期方法
构造方法: 创建servlet对象时调用,只调用1次,证明了sevlet是单例的。
init方法: 创建完对象之后调用。只调用1次。该方法用于初始化对象。
service方法: 在每次请求时调用,调用n次(在访问网页n次)。该方法入口方法,我们的逻辑代码在这里被调用。
destory方法:在servlet对象销毁之后调用。只调用1次。重新部署网站或者停止服务器,servlet对象就会销毁了。
当两个人同时抢一张票时会产生线程并发问题:
static int count=1;//票数
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8"); response.getWriter().write("你当前是第"+count+"个访客!"); //线程 try { Thread.sleep(1000);//就有可能产生同时卖同一张票的情况 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } count++;}在同时从两个窗口对http://localhost:8080/day09_servlet/ThreadDemo访问,就是显示:你当前是第1个访客!更改:synchronized (ThreadDemo.class) { response.getWriter().write("你当前是第"+count+"个访客!"); //线程 try { Thread.sleep(1000);//就有可能产生同时卖同一张票的情况 } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } count++; }添加同步代码块: synchronized (ThreadDemo.class)括号中就是类的名称.class。或者改成方法形式:
2 )同步方法
在doGet中调用 :method(response)
public synchronized static void method(HttpServletResponse response){
try {
response.getWriter().write(“你当前是第”+count+”个访客!”);
} catch (IOException e1) {
e1.printStackTrace();
} // A线程刚刚执行完这句代码,被B线程抢去了执行时机。
//睡眠 try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } count++; }*/
**开发线程安全的servlet建议
1)尽量不要使用成员变量,或者静态成员变量。
2)必须要使用成员变量,要么给使用了成员变量的代码块加同步锁,加锁的代码块的范围尽量缩小,因为有可能影响程序并发效率。**
- servlet生命周期和线程问题
- 关于Servlet的生命周期和线程安全
- servlet的生命周期及线程安全等问题
- 关于servlet的生命周期和线程的安全性
- Servlet生命周期及线程安全
- Servlet技术和Servlet生命周期:
- servlet的生命周期,servlet是单线程还是多线程(基础问题)
- Servlet生命周期和ServletConfig
- servlet生命周期和并发
- servlet生命周期和原理
- Servlet生命周期和JSP
- servlet原理和生命周期
- Servlet初探和生命周期
- 线程生命周期问题
- Servlet、jsp的生命周期,线程安全,感悟
- Servlet线程安全性问题
- Servlet线程安全性问题
- Servlet线程安全性问题
- 08_阶段1__搭建环境__整合Spring与Struts2_14.16.avi
- 【Leetcode】Reverse Integer
- 小笔记
- 欢迎使用CSDN-markdown编辑器
- Qt5_在QWidget中画动态图
- servlet生命周期和线程问题
- 如何利用 LTE/4G 伪基站+GSM 中间人攻击攻破所有短信验证 ,纯干货!| 硬创公开课
- QT 多窗口显示 窗口之间的切换
- python学习第一讲(基本的操作)
- 蓝桥杯 手链样式(暴力)
- 数据库设计的三大范式
- swift中的逻辑分支,和一些简单的三目,gurad let ,if let
- 如何批量在mysql里添加数据
- FileOutputStream