ThreadLocalか。 2017/01/10
2021/03/14

Javaです。ThreadLocalです。



package a;

public class TestThreadLocal {

 static class A {
  final ThreadLocal<String> value1 = new ThreadLocal<>();
  String value2;

  void setValue(String value) {
   this.value1.set(value);
   this.value2 = value;
  }

  void print(String marker) {
   System.out.printf("%s value1:%s value2:%s threadName:%s%n", marker, this.value1.get(), this.value2, Thread.currentThread().getName());
  }
 }

 public static void main(String[] args) throws InterruptedException {
  final A a = new A();
  a.print("a1==>");
  a.setValue("a");
  a.print("a2==>");
  new Thread(new Runnable() {
   @Override
   public void run() {
    a.print("b1==>");
    a.setValue("b");
    a.print("b2==>");
   }
  }).start();
  Thread.sleep(1);
  new Thread(new Runnable() {
   @Override
   public void run() {
    a.print("c1==>");
    a.setValue("c");
    a.print("c2==>");
   }
  }).start();
  Thread.sleep(1);
  a.print("a3==>");
 }

}

結果

Webとかで使う場合、スレッドが再利用されるので、しっかり後片付けしないとだめだよ。
参考

: