您的位置:首页 > Web前端

java 缓冲池 BufferPool

2017-02-06 11:32 471 查看
/**
* 缓冲池
*/
public class BufferPool {
private static final int BUFFER_SIZE = 2 * 1024 * 1024;		//缓冲包2M

private static final int BUFFER_MAX_NUM = 20;					//缓冲池保留最大数量
private static final ConcurrentLinkedQueue<byte[]> buffers = new ConcurrentLinkedQueue<byte[]>();

private static AtomicInteger countCreated = new AtomicInteger(0);	//已创建的缓冲包个数

/** 分配  */
public static byte[] allocate() {
byte[] result = buffers.poll();
//创建新缓冲包
if(result == null) {
result = new byte[BUFFER_SIZE];

//记录创建个数
int count = countCreated.incrementAndGet();

//日志
if(count <= BUFFER_MAX_NUM) {
LogCore.CORE.info("创建新的BufferPool缓冲池,已创建总数量:count={}", count);
} else {
LogCore.CORE.warn("创建新的BufferPool缓冲池,已创建总数量:count={}", count, new Throwable());
}
}
return result;
}

/**
* 回收
* @param buff
*/
public static void deallocate(byte[] buff) {
//缓冲池已达上限
if(buffers.size() >= BUFFER_MAX_NUM) return;
//回收的缓冲大小必须正确
if(buff.length != BUFFER_SIZE) return;

//加回到池中
buffers.add(buff);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  buffer