ThreadLocal机制
时间: 2024-08-20 12:01:39 浏览: 48
`ThreadLocal` 是 Java 中的一个并发工具类,它允许每个线程都有自己的独立副本(即实例),而不是共享同一个变量。这在多线程环境中非常有用,特别是在那些不需要跨线程共享的数据情况下。
当你创建一个 `ThreadLocal` 对象并赋值给它时,这个值就只属于当前线程。其他线程无法访问到这个特定线程的本地变量。示例如下:
```java
ThreadLocal<Integer> threadLocalInt = new ThreadLocal<>();
threadLocalInt.set(10); // 设置初始值
// 在不同线程中访问
new Thread(() -> {
System.out.println(threadLocalInt.get()); // 输出:10 (这是主线程的值)
}).start();
new Thread(() -> {
try {
Thread.sleep(1000); // 暂停以区分线程
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(threadLocalInt.get()); // 输出:null 或者抛出异常,因为新线程没有设置值
}).start();
```
在这个例子中,第一个线程设置了 `threadLocalInt` 的值,但第二个线程开始时没有自己的副本,所以尝试获取值会返回 `null` 或抛出异常。这样就保证了每个线程有自己独立的局部状态。
阅读全文