package demo.thread;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
//ThreadLocal方法演示
public class ThreadLocal线程局部变量 {
@Test
public void demo() {
//共享资源String
final ThreadLocal<String> threadLocal = new ThreadLocal<>();
threadLocal.set(Thread.currentThread().getName() + ": 线程存入的字符串");
System.out.println(threadLocal.get());
//移除字符串
threadLocal.remove();
new Thread() {
@Override
public void run() {
threadLocal.set(Thread.currentThread().getName() + ": 线程存入的字符串");
System.out.println(threadLocal.get());
}
}.start();
System.out.println("main线程移除后的字符串: " + threadLocal.get());
}
}
/**
* 模拟ThreadLocal
* <p>
* ThreadLocal内部其实是个Map来保存数据。
* 虽然在使用ThreadLocal时只给出了值,没有给出键,其实它内部使用了当前线程做为键。
*/
class ThreadLocalSimulation<T> {
// 使用当前线程做key
private Map<Thread, T> threadTMap = new HashMap<>();
public void set(T data) {
threadTMap.put(Thread.currentThread(), data);
}
public T get() {
return threadTMap.get(Thread.currentThread());
}
public void remove() {
threadTMap.remove(Thread.currentThread());
}
}
/**
* ThreadLocal通常用在一个类的成员上
* 多个线程访问它时,每个线程都有自己的副本,互不干扰!
* Spring中把Connection放到了ThreadLocal中!
*/
class User {
private ThreadLocal<String> usernameTl = new ThreadLocal<String>();
//...
}
ThreadLocal线程局部变量
最新推荐文章于 2025-05-12 09:42:46 发布
本文通过示例展示了如何在Java中使用ThreadLocal实现线程局部变量,介绍了其原理并模拟ThreadLocal的工作机制。重点讲解了线程间数据隔离的特点和Spring中Connection的ThreadLocal应用场景。
1024

被折叠的 条评论
为什么被折叠?



