假如一下代码在一个类里面, 我传一个Listener进来给成员变量:
Listener mListener;
.....
public void setListener(Listener ls)
{
   mListener = ls;
}如果我在一个方法中这么使用这个Listener
private void doSome()
{
    Listener ls = mListener;
    ....
//如果我在调用下面这个方法前, 在其它某个线程把mListener置为了NULL, 运行下面的会发生什么?
    ls.XXX();
//如果上面的方法可运行, 那么这涉及到内存泄露吗? 谢谢!}

解决方案 »

  1.   

    如果另一个线程修改的是同一个类对象的mListener的话,应该会报错吧?
      

  2.   

    Java 本身不存在内存泄露如果按照 lz 想象的顺序执行,没有问题但是确定 mListener置NULL 发生的顺序呢,没有同步机制的话
      

  3.   

    不会报错,只是这个Listener对象换了个引用而已。对象还是在那里。但是如果你将剩下那个ls也置为NULL了的话,那么jvm就会检测到你这个Listener对象已经没有引用了。就会自动销毁