实例1:
package com.bijian.thread; public class MyThread extends Thread { private static ThreadLocal tl = new ThreadLocal() { protected synchronized Object initialValue() { return new Integer(sernum++); } }; private static int sernum = 100; MyThread(String name) { super(name); } public void run() { for (int i = 0; i < 5; i++) System.out.println(getName() + " " + tl.get()); } }
package com.bijian.thread; public class ThreadLocalDemo1 { public static void main(String[] args) { MyThread mt1 = new MyThread("A"); MyThread mt2 = new MyThread("B"); MyThread mt3 = new MyThread("C"); mt1.start(); mt2.start(); mt3.start(); } }
运行结果:
C 101 A 100 B 102 A 100 C 101 A 100 B 102 A 100 C 101 A 100 B 102 C 101 B 102 C 101 B 102
实例2:
package com.bijian.thread; public class MyThread extends Thread { private static ThreadLocal tl = new ThreadLocal(); private static int sernum = 100; MyThread(String name) { super(name); } public void run() { synchronized ("A") { tl.set("" + sernum++); } for (int i = 0; i < 10; i++) System.out.println(getName() + " " + tl.get()); } }
package com.bijian.thread; public class ThreadLocalDemo2 { public static void main(String[] args) { MyThread mt1 = new MyThread("A"); MyThread mt2 = new MyThread("B"); MyThread mt3 = new MyThread("C"); mt1.start(); mt2.start(); mt3.start(); } }
运行结果:
A 100 B 101 A 100 C 102 A 100 B 101 A 100 C 102 A 100 B 101 C 102 B 101 C 102 B 101 C 102
相关推荐
"Java 中ThreadLocal实例分析" Java 中的 ThreadLocal 实例分析是指在多线程环境下,如何使用 ThreadLocal 来实现线程安全。ThreadLocal 是 Java 中的一种机制,用于在多个线程中实现变量的隔离。 在上面的代码中...
当多个线程并发执行时,每个线程都可以安全地使用自己的`Connection`实例,而不会相互干扰。 总的来说,结合JDBC的事务管理和ThreadLocal,我们可以在多线程环境中更好地实现数据库操作,确保数据的一致性,并提高...
创建ThreadLocal实例时,通常会定义一个泛型参数,代表该线程局部变量的类型。例如: ```java ThreadLocal<String> threadLocal = new ThreadLocal(); ``` ### 设置和获取值 在ThreadLocal中,`set()`方法用于...
当我们创建一个新的ThreadLocal实例时,它并不会立即分配内存,而是等到线程第一次调用`set`或`get`方法时才会为该线程创建一个副本。这个副本存储在线程的ThreadLocalMap中,这个Map是由Thread类维护的,键是...
通过创建ThreadLocal实例,我们可以为每个线程提供一个独立的变量副本,这些副本在各个线程之间互不影响,从而实现线程局部变量的功能。本文将深入探讨ThreadLocal的使用、原理以及一些实际应用中的测试案例。 ### ...
由于ThreadLocalMap使用弱引用保存键(即ThreadLocal实例),当ThreadLocal变量不再被引用时,垃圾收集器可以回收ThreadLocal实例。但是,如果ThreadLocalMap中的值(通常是对象)仍然被其他强引用保持,那么即使...
ThreadLocalMap的实现使用了弱引用(WeakReference<ThreadLocal<?>>)作为key,这是因为即使没有外部引用指向ThreadLocal实例,只要它还在ThreadLocalMap中作为key存在,垃圾收集器就不会回收ThreadLocal实例。...
1. **创建ThreadLocal实例:** 首先,你需要创建一个ThreadLocal类型的实例,这将作为你在每个线程中存储值的容器。 ```java ThreadLocal<String> threadLocal = new ThreadLocal(); ``` 2. **设置线程局部变量的...
- ThreadLocalMap使用弱引用作为键,这意味着如果线程不再引用ThreadLocal实例,即使ThreadLocal实例仍然存在,但只要没有其他引用,那么在垃圾收集时,ThreadLocal实例会被清除,相应的ThreadLocalMap中的条目也会...
每个线程都有自己的ThreadLocalMap,当创建新的ThreadLocal实例时,如果没有为当前线程创建过这个映射表,那么就会为当前线程创建一个。ThreadLocal通过get()和set()方法访问或设置线程局部变量,这些操作会直接作用...
每个线程都有自己的ThreadLocal实例,它们各自保存独立的变量副本,互不影响。ThreadLocal的主要优点在于避免了线程之间的数据共享,减少了同步的需求,从而提高了程序的性能和可读性。 ### ThreadLocal的使用方法 ...
ThreadLocal的工作原理可以这样理解:每个ThreadLocal实例都会为每个线程创建一个单独的存储空间,也就是说,当多个线程访问同一个ThreadLocal实例时,每个线程都有自己独立的副本,互不干扰。ThreadLocal并不提供...
ThreadLocal的使用方法是创建一个ThreadLocal实例,然后通过其set()方法设置线程局部变量,get()方法获取当前线程的该变量值。需要注意的是,ThreadLocal不是线程安全的,它只是保证了线程内部的隔离性,但不负责...
在ThreadLocal中,每个实例都有一个内部Map,这个Map存储了键值对,键是ThreadLocal实例,值就是线程本地的变量副本。在JDK 8之前,这个内部Map是`ThreadLocal.ThreadLocalMap`,而从JDK 8开始,改为了`...
每个线程都有自己的ThreadLocal实例,并且只能访问自己的副本,不会与其他线程的数据产生冲突,从而实现了线程间的隔离。使用ThreadLocal可以避免在多线程环境下频繁的同步操作,提高程序的效率。例如,在Web应用...
ThreadLocal的使用方法通常是创建一个ThreadLocal实例,然后在需要的地方通过它的`set()`方法设置线程局部变量的值,通过`get()`方法获取该变量的副本。在生命周期结束后,通常需要调用`remove()`方法清除线程的副本...
1. **创建ThreadLocal实例**:首先,你需要创建一个ThreadLocal实例,这是你将要存储线程局部变量的地方。例如: ```java ThreadLocal<String> threadLocalVar = new ThreadLocal(); ``` 2. **设置线程局部值**...
每个线程都拥有自己的ThreadLocal实例,存储在这个实例中的变量只对当前线程可见,其他线程无法访问。 2. **作用**:ThreadLocal主要用在多线程环境下,为每个线程提供独立的、线程私有的变量副本,避免了线程间的...