ThreadLocal可以做什么
时间: 2023-11-25 12:51:49 浏览: 69
ThreadLocal可以用于实现线程间数据的隔离,每个线程都有自己的ThreadLocal变量,可以在不同的线程中存储不同的值,从而实现线程间数据的隔离。具体来说,可以通过ThreadLocal的set()方法设置变量的值,通过get()方法获取变量的值,每个线程都只能访问自己的变量,从而避免了线程安全问题。另外,InheritableThreadLocal可以实现多个线程访问ThreadLocal的值,包括子线程访问父线程的ThreadLocal变量。
以下是一个使用ThreadLocal实现线程间数据隔离的例子:
```java
public class MyRunnable implements Runnable {
private ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0;
}
};
@Override
public void run() {
for (int i = 0; i < 5; i++) {
int num = threadLocal.get();
num += i;
threadLocal.set(num);
System.out.println(Thread.currentThread().getName() + " - num: " + num);
}
}
}
public class Test {
public static void main(String[] args) {
MyRunnable myRunnable = new MyRunnable();
Thread t1 = new Thread(myRunnable, "Thread-1");
Thread t2 = new Thread(myRunnable, "Thread-2");
t1.start();
t2.start();
}
}
```
输出结果为:
```
Thread-1 - num: 0
Thread-1 - num: 1
Thread-1 - num: 3
Thread-1 - num: 6
Thread-1 - num: 10
Thread-2 - num: 0
Thread-2 - num: 1
Thread-2 - num: 3
Thread-2 - num: 6
Thread-2 - num: 10
```
阅读全文