能举一个java的例子吗?
时间: 2024-02-15 16:01:18 浏览: 78
当然可以,Java 中也提供了线程局部变量的支持。在 Java 中,可以使用 `ThreadLocal` 类来实现线程局部存储。例如:
```java
import java.util.concurrent.*;
public class ThreadLocalDemo {
private static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0;
}
};
public static void main(String[] args) throws Exception {
ExecutorService executorService = Executors.newFixedThreadPool(2);
for (int i = 0; i < 2; i++) {
executorService.execute(() -> {
int value = threadLocal.get();
value++;
threadLocal.set(value);
System.out.println(Thread.currentThread().getName() + " thread local variable value: " + threadLocal.get());
});
}
executorService.shutdown();
}
}
```
在上面的例子中,我们使用了 `ThreadLocal` 类声明了一个线程局部变量 `threadLocal`,并设置了初始值为 0。在 `main` 函数中,我们创建了一个固定线程池,然后提交了两个任务到线程池中。每个任务中都会获取线程局部变量 `threadLocal` 的值,然后将其加 1,并将结果存回线程局部变量中。最后,我们输出了线程名以及线程局部变量的值。运行结果如下:
```
pool-1-thread-1 thread local variable value: 1
pool-1-thread-2 thread local variable value: 1
```
可以看到,每个线程中的 `threadLocal` 值都是独立的,不会相互影响。这就是线程局部存储的作用。
阅读全文