原理就是采用了在一个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++;
}
}
}