原理就是采用了在一个Message的类变量,维护了一个Message实例的链表
以下是部分源代码和注释
private static Message sPool; //类变量,表示Message池,指向链表的表头 private static int sPoolSize = 0; //链表的长度 private static final int MAX_POOL_SIZE = 10; //链表池的最大长度 Message next; //实例变量,指向链表中下一个Message的实例 public static Message obtain() { synchronized (sPoolSync) { //如果链表池不为空,就取走表头的一个Message实例,减少了创建对象的操作 if (sPool != null) { Message m = sPool; sPool = m.next; m.next = null; sPoolSize--; return m; } } //如果链表为空,创建新实例 return new Message(); } public void recycle() { clearForRecycle(); //当一个Message不再使用时,如果当前链表的数量少于池大小(默认10个),将此Message加入链表中 synchronized (sPoolSync) { if (sPoolSize < MAX_POOL_SIZE) { next = sPool; sPool = this; sPoolSize++; } } }