threadlocal的set和get方法
时间: 2023-10-15 10:30:57 浏览: 99
彻底理解Java中的ThreadLocal
ThreadLocal是Java中的一个线程局部变量,它提供了一种在多线程环境下,每个线程都拥有自己独立的变量副本的机制。在使用ThreadLocal的过程中,我们可以通过get()方法获取当前线程的变量副本,也可以通过set()方法设置当前线程的变量副本。
具体来说,set()方法用于将变量的值设置到当前线程的变量副本中,其方法签名如下:
```java
public void set(T value)
```
其中,T表示要设置的变量类型,value表示要设置的变量值。
而get()方法用于获取当前线程的变量副本中的值,其方法签名如下:
```java
public T get()
```
其中,T表示要获取的变量类型。
以下是一个使用ThreadLocal的示例:
```java
public class MyThread implements Runnable {
private static ThreadLocal<String> threadLocal = new ThreadLocal<>();
public void run() {
threadLocal.set("Hello, I'm " + Thread.currentThread().getName());
System.out.println(threadLocal.get());
threadLocal.remove();
}
}
public class Main {
public static void main(String[] args) {
MyThread myThread = new MyThread();
Thread t1 = new Thread(myThread);
Thread t2 = new Thread(myThread);
t1.start();
t2.start();
}
}
```
在上述示例中,我们定义了一个MyThread类实现了Runnable接口,并在其中使用了一个静态的ThreadLocal变量threadLocal。在run()方法中,我们通过set()方法将"Hello, I'm " + Thread.currentThread().getName()的值设置到threadLocal中,然后通过get()方法获取该值并打印输出。最后,我们通过remove()方法将threadLocal中的值移除,以确保下一次获取的是新的变量副本。
运行上述代码,可以看到输出结果类似于:
```
Hello, I'm Thread-0
Hello, I'm Thread-1
```
可以看出,每个线程都拥有自己独立的变量副本,并且互不影响。这就是ThreadLocal的作用所在。
阅读全文