The whole code is:
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(); } }
why the following snippet:
ThreadLocalTest test=new ThreadLocalTest(); new Thread(new MyThread(new Integer(1),test)).start();
cause the following error:
No enclosing instance of type ThreadLocalTest is accessible. Must qualify the allocation with an enclosing instance of type ThreadLocalTest (e.g. x.new A() where x is an instance of ThreadLocalTest).
The core problem is that: i want to initialize the inner class in the static methods. here are two solutions:
- make the inner class as outer class
- use outer reference like :
new Thread(test.new MyRunnable(test)).start();//Use test object to create new