ThreadLocal ベースのクラスに問題があります。どんな助けでも大歓迎です。これは、何かの単純なリストを持つ基本クラスです。
public class ThreadLocalTest {
protected static final ThreadLocal<List<String>> thList = new ThreadLocal<List<String>>() {
protected List<String> initialValue() {
return new ArrayList<String>();
}
};
public static void put(String k) {
thList.get().add(k);
}
public static List<String> getList() {
return thList.get();
}
}
私はこの方法でそれをテストしています:
Thread th1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("------------------thread1---------------------------");
ThreadLocalTest.put("a");
ThreadLocalTest.put("b");
List<String> l = ThreadLocalTest.getList();
System.out.println(l.size());
System.out.println("----------------------------------------------------");
}
});
Thread th2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("------------------thread2---------------------------");
ThreadLocalTest.put("c");
List<String> l = ThreadLocalTest.getList();
System.out.println(l.size());
System.out.println("----------------------------------------------------");
}
});
th1.run();
th2.run();
th1.run();
th2.run();
th1.run();
th2.run();
th1.run();
th2.run();
だから私が得るものは次のとおりです:
------------------thread1---------------------------
2
----------------------------------------------------
------------------thread2---------------------------
3
----------------------------------------------------
------------------thread1---------------------------
5
----------------------------------------------------
------------------thread2---------------------------
6
----------------------------------------------------
------------------thread1---------------------------
8
----------------------------------------------------
------------------thread2---------------------------
9
----------------------------------------------------
------------------thread1---------------------------
11
----------------------------------------------------
------------------thread2---------------------------
12
----------------------------------------------------
これらのスレッドが実際にはまったく同じリストを共有しているように見えますが、その理由はわかりません。
任意のヒント?