今日も元気にThreadLocal
2013/05/23
java
Thread
Javaです。
ThreadLocalです。使ったことなかったんですよね。ThreadLocal。なので、動きがいまいちわからなかったんですけど、コードを書くとイメージわきますね。
getの実装が内部ではカレントスレッドのmapから値をとるようになってます。なので、スレッドごとに値が保存できるようになってました。Threadがなくなると値がGCされるようですね。
public class TestThreadLocal {
public static void main(String[] args) {
a();
}
static void a() {
final ThreadLocal<String> threadLocal = new ThreadLocal<String>();
threadLocal.set(Thread.currentThread().getName());
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("この値はnull = " + threadLocal.get());
threadLocal.set("thread1");
System.out.println("この値はthread1 = " + threadLocal.get());
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("この値はnull = " + threadLocal.get());
threadLocal.set("thread2");
System.out.println("この値はthread2 = " + threadLocal.get());
}
});
thread1.start();
thread2.start();
System.out.println("この値は" + Thread.currentThread().getName() + "=" + threadLocal.get());
}
}
実行の結果、スレッドなので、毎回、順序がかわりますが下の感じ。
この値はnull = null この値はthread1 = thread1 この値はmain=main この値はnull = null この値はthread2 = thread2
: