`
kawaii_xw
  • 浏览: 47320 次
  • 性别: 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

分享到:
评论

相关推荐

    java ThreadLocal多线程专属的变量源码

    java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多线程专属的变量源码java ThreadLocal多...

    Hibernate用ThreadLocal模式(线程局部变量模式)管理Session

    ThreadLocal并不是线程的本地实现,而是一个线程局部变量,它为每个线程提供了一个变量的副本,确保每个线程都可以独立地操作自己的副本,而不干扰其他线程。因此,ThreadLocal可以帮助我们在多线程环境下为每个线程...

    多线程线程变量赋值

    Java中,我们可以通过`java.lang.ThreadLocal`类来实现线程局部变量。`ThreadLocal`提供了一个线程局部存储的方法,每个线程都有一个与之关联的`ThreadLocal`实例,可以独立地设置和获取值。下面是一个简单的使用...

    ThreadLocal 线程本地变量 及 源码分析.rar_开发_设计

    ThreadLocal是Java编程语言中的一个类,用于在多线程环境下提供线程局部变量。它为每个线程创建了一个独立的变量副本,每个线程只能访问自己的副本,不会影响其他线程。这种机制有助于实现线程安全,尤其在需要线程...

    局部变量线程安全测试

    测试可能包括对局部变量的读写操作,以及涉及到同步机制如synchronized关键字,volatile修饰符,或者是使用ThreadLocal等技术来确保线程安全。 在标签中,“局部变量”、“线程”、“安全”、“测试”和“源码”是...

    java中ThreadLocal类的使用

    Java中的`ThreadLocal`类是一个非常实用的工具,它提供了线程局部变量的功能。线程局部变量意味着每个线程都拥有自己独立的变量副本,互不干扰,这在多线程编程中尤其有用,可以避免数据共享带来的同步问题。下面...

    day18 10.使用ThreadLocal来解决问题

    - **清理**: ThreadLocal实例不自动删除其对应的线程局部变量,因此,如果不再使用,应显式调用remove()方法清除,否则可能导致内存泄漏。线程结束时,其ThreadLocalMap会自动清理,但仅限于这个线程,对于长期运行...

    ThreadLocal应用示例及理解

    **线程局部变量(ThreadLocal)是Java编程中一个非常重要的工具类,它在多线程环境下提供了线程安全的数据存储。ThreadLocal并不是一个变量,而是一个类,它为每个线程都创建了一个独立的变量副本,使得每个线程都...

    ThreadLocal

    4. 当不再需要使用ThreadLocal时,建议清除线程局部变量,防止内存泄漏。可以调用`remove`方法来实现。 ThreadLocal的一个经典应用场景是在数据库连接池中,每个线程都可以有自己的数据库连接,而无需在多个线程间...

    使用ThreadLocal管理“session”数据

    在Java编程中,ThreadLocal是线程局部变量的类,它提供了一种在多线程环境中为每个线程创建和维护独立副本的机制。ThreadLocal主要用于解决线程间的数据隔离问题,确保各线程拥有自己的变量副本,避免了数据共享带来...

    理解ThreadLocal

    ThreadLocal 并不是一个 Thread,而是 Thread 的局部变量,它为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。 ThreadLocal 的接口方法...

    简单分析Java线程编程中ThreadLocal类的使用共

    Java线程编程中的ThreadLocal类是一个非常重要的工具,它在多线程环境下提供了一种线程局部变量的机制。ThreadLocal并非是简单的变量,而是一种能够确保每个线程都拥有独立副本的变量容器。理解ThreadLocal的工作...

    ThreadLocal源码分析和使用

    ThreadLocal 的原理是通过一个 Map 来存储每一个线程的变量副本,Map 中元素的键为线程对象,而值对应线程的变量副本。这样,当线程访问 ThreadLocal 变量时,实际上是访问的自己的副本,而不会影响其他线程的副本。...

    ThreadLocal的用处

    - ThreadLocal不是线程安全的,它只是保证了每个线程内部的线程局部变量是独立的。 - 不要将ThreadLocal用作全局变量,因为这样可能会导致内存泄漏。 - 尽量避免在静态方法中使用ThreadLocal,因为静态方法没有...

    通向架构师的道路(第七天)之漫谈使用ThreadLocal改进你的层次的划分.docx

    ThreadLocal 的工作原理是,为每个线程提供独立的变量副本,每个线程都可以独立地改变自己的副本,而不会影响其他线程所对应的副本。从线程的角度看,目标变量就象是线程的本地变量,这也是类名中“Local”所要表达...

    java多线程_java多线程下变量共享_

    - 使用`ThreadLocal`存储线程私有数据,避免全局变量的干扰。 理解并掌握Java多线程下变量共享的原理和解决方案,有助于编写出高效、稳定的并发程序。在实际开发中,应结合具体业务场景选择合适的同步机制,以达到...

    java中ThreadLocal详解

    而`ThreadLocal`则提供了另一种思路:为每个使用该变量的线程分配独立的副本,这样一来,每个线程拥有自己的变量副本,互不影响,从而避免了线程安全问题。 #### 二、ThreadLocal的数据结构及实现原理 `...

    正确理解ThreadLocal.pdf

    `ThreadLocal`是Java平台提供的一种线程局部变量的解决方案,它为每一个使用该变量的线程都提供了独立的变量副本,使得每一个线程都可以独立地改变自己的副本,而不会影响其它线程所对应的副本。这不同于普通的静态...

    ThreadLocal那点事儿编程开发技术共6页.pdf

    1. **ThreadLocal的创建与使用**:在Java中,我们可以通过创建ThreadLocal的实例并调用其`set()`方法来设置线程局部变量,通过`get()`方法获取该变量。ThreadLocal对象本身是全局的,但存储的值是线程局部的。 2. *...

Global site tag (gtag.js) - Google Analytics