Servlet和ThreadLocal的测试

原创 2004年05月25日 10:30:00

Servlet和ThreadLocal的测试

很早以前就对Servlet中的变量生命周期不清楚

最近用hibernate又涉及到ThreadLocal的使用

做个测试看看到底它们的变量有效范围

public class TestThreadServlet extends HttpServlet {

    private static ThreadLocal  thread       = new ThreadLocal();

    private int                 flag         = 0;

 

    public void doGet( HttpServletRequest request,

                      HttpServletResponse response)

            throws ServletException, IOException {

        flag++;

        String str = "This is the first String." + new Object();

        if (thread.get() == null)

            thread.set(str);

        PrintWriter out = response.getWriter();

        out.println("<p>");

        out.println("<BR>flag : " + flag);

        out.println("<BR>sessionid : " + request.getSession().getId());

        out.println("<BR>servlet : " + this.toString());

        out.println("<BR>thread : " + thread.get());

        out.println("</p>");

    }

}

 

 

执行结果:

 

 

Session 1:

flag : 2
sessionid : amGeaiVwKvL9
servlet : test.other.TestThreadServlet@5f2db0
thread : This is the first String.java.lang.Object@1ad6b4b

 

Session 1:

flag : 3
sessionid : aR3GkcUQoXT-
servlet : test.other.TestThreadServlet@5f2db0
thread : This is the first String.java.lang.Object@6214f5

 

 

由执行结果可以看出,

1 服务器对每个Servlet只创建一个实例。flag不停增加

2 Session范围内的ThreadLocal中对象唯一。不同的请求,ObjecthashCode相同。

3 不同的Session共享ThreadLocal,但内部对象不同

另:后来有人提醒我,实际上在web.xml为同一个servlet配置不同的名字,将会是两个不同的实例。也就是说,servlet的实例与配置有关。

    


版权声明:

本文由冰云完成,作者保留中文版权。
未经许可,不得使用于任何商业用途。
欢迎转载,但请保持文章及版权声明完整。
如需联络请发邮件:icecloud(AT)sina.com
Blog:http://icecloud.51.net
 

servlet线程安全问题——ThreadLocal模式

线程安全的概念范畴:        线程安全,指的是在多线程环境下,一个类在执行某个方法时,对类的内部实例变量的访问是安全的。如果代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代...
  • yx0628
  • yx0628
  • 2014年03月14日 10:01
  • 1945

servlet 和 threadlocal 与 web容器

在传统的Web开发中,我们处理Http请求最常用的方式是通过实现Servlet对象来进行Http请求的响应。Servlet是J2EE的重要标准之一,规定了Java如何响应Http请求的规范。通过Htt...
  • ningguixin
  • ningguixin
  • 2013年12月03日 10:48
  • 4025

Servlet和ThreadLocal的测试(zz)

 Servlet和ThreadLocal的测试很早以前就对Servlet中的变量生命周期不清楚最近用hibernate又涉及到ThreadLocal的使用做个测试看看到底它们的变量有效范围public...
  • freeknightlcw
  • freeknightlcw
  • 2004年11月18日 19:51
  • 681

Servlet和ThreadLocal的测试

Servlet和ThreadLocal的测试很早以前就对Servlet中的变量生命周期不清楚最近用hibernate又涉及到ThreadLocal的使用做个测试看看到底它们的变量有效范围publi...
  • techcrunch
  • techcrunch
  • 2008年04月09日 00:30
  • 1369

Java--servlet + ThreadLocal解决多线程并发问题及实例

思维导图 – Servlet+ThreadLocal分包管理实例一:本文思维导图 二:ThreadLocal原理图 三:代码:实体层entity Book.javapackage entity;...
  • u014421677
  • u014421677
  • 2016年06月25日 11:15
  • 454

ThreadLocal对request和response的使用

记得在一篇博文中看到描述threadLocal的一句话: ThreadLocal除了适用于多线程保证每条线程都有自己的变量副本外,还适用于在线程上下文中共享某些变量值。 这两种说法是有区别的。前者...
  • buyaoshuohua1
  • buyaoshuohua1
  • 2017年09月13日 22:29
  • 284

java-ThreadLocal是解决线程安全问题

早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。  ...
  • youdianjinjin
  • youdianjinjin
  • 2016年05月19日 23:20
  • 1892

Java学习整理系列之ThreadLocal的理解

在同步机制中,通过对象的锁机制保证同一时间只有一个线程访问变量。这时该变量是多个线程共享的,使用同步机制要求程序慎密地分析什么时候对变量进行读写,什么时候需要锁定某个对象,什么时候释放对象锁等繁杂的问...
  • Sup_Heaven
  • Sup_Heaven
  • 2014年06月11日 20:30
  • 5365

利用ThreadLocal实现全局上下文工具类

/** * 全局上下文工具类,用于储存一些东西 */ public class MyContext { private static final ThreadLocal> mycontex...
  • flysun3344
  • flysun3344
  • 2017年02月07日 15:36
  • 570

servlet 变量 及servlet 初始化 和销毁 ThreadLocal

servlet static变量是全局变量, 所有连接到服务器的用户共享一个变量,如 初始化时 static int num=1; 用户登录一次 num++;  张三 登录后 num++,此时num=...
  • u013378306
  • u013378306
  • 2015年09月03日 10:13
  • 594
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Servlet和ThreadLocal的测试
举报原因:
原因补充:

(最多只允许输入30个字)