能举一个跨类使用的例子吗?
时间: 2023-07-20 17:12:30 浏览: 105
不同类之间函数调用实例
当然可以,Java 中的线程局部变量可以跨类使用。在这种情况下,可以将线程局部变量声明为静态变量,然后在多个类中共享。例如:
```java
public class ThreadLocalDemo {
public static class MyRunnable implements Runnable {
private static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return 0;
}
};
@Override
public void run() {
int value = threadLocal.get();
value++;
threadLocal.set(value);
System.out.println(Thread.currentThread().getName() + " thread local variable value: " + threadLocal.get());
}
}
public static void main(String[] args) throws Exception {
ExecutorService executorService = Executors.newFixedThreadPool(2);
for (int i = 0; i < 2; i++) {
executorService.execute(new MyRunnable());
}
executorService.shutdown();
}
}
```
在上面的例子中,我们将线程局部变量 `threadLocal` 声明为 `MyRunnable` 类的静态变量,并设置了初始值为 0。然后,在 `run` 方法中,我们使用了 `threadLocal` 变量对其进行了加 1 操作,并将结果存回线程局部变量中。最后,我们输出了线程名以及线程局部变量的值。在 `main` 函数中,我们创建了一个固定线程池,并提交了两个 `MyRunnable` 对象到线程池中。运行结果如下:
```
pool-1-thread-1 thread local variable value: 1
pool-1-thread-2 thread local variable value: 1
```
可以看到,每个线程中的 `threadLocal` 值都是独立的,不会相互影响。这就是线程局部存储的作用。
阅读全文