【发布时间】:2012-09-10 09:38:14
【问题描述】:
整个代码是:
public class ThreadLocalTest {
ThreadLocal<Integer> globalint = new ThreadLocal<Integer>(){
@Override
protected Integer initialValue() {
return new Integer(0);
}
};
public class MyThread implements Runnable{
Integer myi;
ThreadLocalTest mytest;
public MyThread(Integer i, ThreadLocalTest test) {
myi = i;
mytest = test;
}
@Override
public void run() {
System.out.println("I am thread:" + myi);
Integer myint = mytest.globalint.get();
System.out.println(myint);
mytest.globalint.set(myi);
}
}
public static void main(String[] args){
ThreadLocalTest test = new ThreadLocalTest();
new Thread(new MyThread(new Integer(1), test)).start();
}
}
为什么是下面的 sn-p:
ThreadLocalTest test=new ThreadLocalTest();
new Thread(new MyThread(new Integer(1),test)).start();
导致以下错误:
没有可以访问 ThreadLocalTest 类型的封闭实例。必须符合条件 使用 ThreadLocalTest 类型的封闭实例进行分配(例如 x.new A() 其中 x 是 ThreadLocalTest 的一个实例)。
核心问题是: 我想在静态方法中初始化内部类。 这里有两个解决方案:
将内部类设为外部类
使用外部引用,如:
new Thread(test.new MyRunnable(test)).start();//Use test object to create new
【问题讨论】:
-
什么错误?我看起来你刚刚将代码重新粘贴为错误
标签: java multithreading thread-safety static-methods