问题描述
//仅用于测试,无任何业务public class DateFormat2 { public static SimpleDateFormat parse(){ SimpleDateFormat adf=new SimpleDateFormat (); return adf}}//多线程测试上述方法,局部变量应该在线程栈中,每个线程访问该方法后都new一个对象,应该是不同的引用地址,但结果却不是,测试方法如下public class Test { public static class TestSimpleDateFormatThreadSafe extends Thread { @Override public void run() { while(true) { try { this.join(2000); } catch (InterruptedException e1) { e1.printStackTrace(); } try {System.out.println(this.getName()+":"+DateFormat2.parse());} catch (ParseException e) {e.printStackTrace();} } } }public static void main(String[] args) throws ParseException {for (int i = 0; i <3; i++) {new TestSimpleDateFormatThreadSafe().start();}}}请问这是为什么?,非常感谢
解决方案
这个问题的关键是不是在于,静态方法中定义的内部变量是否属于类或类实例共享级别? 如果是,那么这个是不就相当于public static SimpleDateFormat adf = new SimpleDateFormat();
解决方案二:
说明sprite311你的例子 是不同的SimpleDateFormat对象 但是他们的hashCode()相同 2014-01-08 15:13mzqhappylife嗯,这个解释我能接受,非常感谢,给分了 2014-01-08 15:47