`
kawaii_xw
  • 浏览: 47729 次
  • 性别: Icon_minigender_2
  • 来自: 西安
社区版块
存档分类
最新评论

使用ThreadLocal存取线程局部变量

    博客分类:
  • Tips
阅读更多

创建一个独立的线程:

<!---->1 public class AnotherThread implements Runnable{
2 public void run(){
3
4 TestThreadLocal ttl = new TestThreadLocal();
5 int number1 = ttl.get();
6
7 System.out.println( " another number1 is " + number1);
8 }
9 }


ThreadLocal的测试类:

<!----> 1 public class TestThreadLocal {
2
3 // The next serial number to be assigned
4 private static int nextSerialNum = 0 ;
5
6 private static ThreadLocal serialNum = new ThreadLocal() {
7 protected synchronized Object initialValue() {
8 return new Integer(nextSerialNum ++ );
9 }
10 };
11
12 public static int get() {
13 return ((Integer) (serialNum.get())).intValue();
14 }
15
16 public static void main(String[] args) {
17 TestThreadLocal ttl = new TestThreadLocal();
18 int number1 = ttl.get();
19
20 System.out.println( " number1 is " + number1);
21
22 int number2 = ttl.get();
23
24 System.out.println( " number2 is " + number2);
25
26 new Thread( new AnotherThread()).start();
27 new Thread( new AnotherThread()).start();
28 }
29 }
30

输出结果为:
number1 is 0
number2 is 0
another number1 is 1
another number1 is 2
由此可见,对于同一个线程,都维护一个自己的局部变量。这在并发环境中可以很好的防止线程间共享资源的冲突。ThreadLocal 实例通常是类中的私有静态字段,它们希望将状态与某一个线程(例如,用户 ID 或事务 ID)相关联。

Hibernate中对session的管理有这样一个应用ThreadLocal的实例:
http://www.hibernate.org/207.html

分享到:
评论

相关推荐

    threadlocalpool:演示池环境中的线程局部变量

    线程局部变量(ThreadLocal)是Java编程语言中一个非常重要的特性,主要用于在多线程环境中为每个线程提供独立的变量副本。标题"threadlocalpool:演示池环境中的线程局部变量"暗示我们将探讨如何在池化的线程环境中...

    java核心知识点学习----多线程间的数据共享和对象独立,ThreadLocal详解.pdf

    为了解决这个问题,我们可以使用线程局部变量(ThreadLocal)或者通过同步机制如synchronized关键字来实现线程间的数据隔离。 1. **线程内的数据共享与对象独立**: 在例子中,使用了HashMap来存储每个线程的数据...

    threadlocal:java.lang.ThreadLocal 的实验性无等待并发实现

    2. **内存管理**:为了解决`ThreadLocal`可能导致的内存泄漏问题,实验实现可能引入了更智能的垃圾回收机制,比如弱引用或删除策略,确保不再使用的线程局部变量能够被及时释放。 3. **性能优化**:可能通过减少...

    Java 线程开发讲座

    - **线程栈**:每个线程都有自己的独立栈空间,用于存储线程局部变量和方法调用信息。 - **线程变量**:使用`ThreadLocal`类可以为每个线程提供独立的变量副本,解决多线程之间的数据安全问题。 - **示例代码**: `...

    java 聊天系统 直接导入就可运行

    聊天系统中,每个用户的状态信息可以存储在线程局部变量中,保证线程安全。 7. **异常处理** 多线程环境下,异常处理也非常重要。每个线程都应该有适当的try-catch-finally结构,以确保即使在异常发生时也能正确...

    SpringMVC面试专题及答案.pdf

    为避免这个问题,控制器内部不应包含可变状态,或者可以使用 ThreadLocal 变量来处理线程局部变量。 SpringMVC 与 Struts2 的主要区别: 1)入口点不同:SpringMVC 通过 DispatcherServlet,而 Struts2 使用 Filter...

    SpringMVC面试专题1

    解决方案是避免在控制器中定义实例变量,或者使用ThreadLocal来确保线程局部变量的安全。 6. **SpringMVC与Struts2的区别** - 入口不同:SpringMVC由Servlet(前端控制器)处理,Struts2由Filter(过滤器)处理。 ...

    javaWeb笔记集合1

    ThreadLocal则是Java中的一个线程局部变量,用于解决多线程环境下的数据隔离问题。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。AJAX...

    27个java常用的工具类

    15. **ThreadLocal**: 提供线程局部变量,每个线程都有自己的副本,互不影响。 16. **UUID**: 生成全局唯一标识符(UUID),常用于数据库主键生成。 17. **ArrayList and Vector**: 都是基于动态数组的列表实现,`...

Global site tag (gtag.js) - Google Analytics