Java 核心技术高可用Nginx/HaproxyJava学习笔记

发布和逸出

2017-02-13  本文已影响70人  Hughman

概念

发布对象的两种方法:

举例

public class Set<Secret> KnowSecrets;
public void initialize()
{
  knownSecrets = new HashSet<Secret>();
}

举例

public class ThisEscape
{
  public ThisEscape(EventSource source)
  {
    source.registerListener(
    {
      new EventListener()
      {
        public void onEvent(Event e)
        {
          doSomething(e);
        }
      }
    });
  }
}

发布某对象的影响:

外部方法(Alien Method):

假设一个类A,则行为并不完全由类A来规定的方法,包括其他类中的定义的方法以及类A中可以被改写的方法(既不是private方法也不是final方法),则这些方法就称作为外部方法。

安全的构造函数过程

举例:使用工厂方法来防止this引用在构造函数过程中逸出

public class SafeListener {
  private final EventListener listener;
>
  private SafeListener() {
    listener = new EventListener() {
      public void onEvent(Event e) {
        doSomething(e);
      }
    };
  }
  
  public static SafeListener newInstance(EventSource source) {
    SafeListener safe = new SafeListener();
    source.registerListener(safe.listener);
    return safe;
  }
}

[source:Java并发编程实战]

上一篇 下一篇

猜你喜欢

热点阅读