Servlet学习笔记(一)

2017-12-22 / 0 评论 / 10272 阅读

当用户调用一个 Servlet 时,就会创建一个 Servlet 实例,每一个用户请求都会产生一个新的线程,适当的时候移交给 doGet 或 doPost 方法。init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

由于常驻内存继而创建新的进程会出现资源的同步互斥现象;

Servlet: 同CGI程序 用来处理当前HTTP server交互数据


测试源码:1234123.jpg


web.xml 文件中 指明项目访问路径 servlet-pattren  打开Tomcat 通过多开多个浏览器进行访问查看全局变量i的数值 

123.jpg

全局变量在多线程访问时不断改变

1232434234.jpg


需要将多个线程访问的资源加上锁,现在这种做法是给Servlet对象加了一把锁,保证任何时候都只有一个线程在访问该Servlet对象里面的资源,这样就不存在线程安全问题了

      synchronized (this) {  //Java中每个对象都有一把锁,这里的this指的就是servlet对象
            response.setContentType("text/html");
            i++;
            String s=i+"";
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                // TODO: handle exception   
                e.printStackTrace();    
            }
            response.getWriter().write(s);

        }






    评论一下?

    OωO
    取消