|
@@ -20,8 +20,7 @@ public class RoomManager {
|
|
|
protected Logger logger = Log4jUtil.getLogger(getClass());
|
|
|
|
|
|
private static RoomManager instance;
|
|
|
- /** 根据房间类型维护独立的对象池 [key:房间类型, value:对象池] **/
|
|
|
- private final Map<Integer, LinkedBlockingQueue<Room>> poolMap = new ConcurrentHashMap<>();
|
|
|
+
|
|
|
/** 房间缓存 [key:房间类型, value:房间实例] **/
|
|
|
public Map<Integer, Room> roomMap = new ConcurrentHashMap<>();
|
|
|
|
|
@@ -92,7 +91,7 @@ public class RoomManager {
|
|
|
* @return
|
|
|
*/
|
|
|
private Room acquireRoom(int roomType) {
|
|
|
- LinkedBlockingQueue<Room> pool = poolMap.computeIfAbsent(roomType, k -> new LinkedBlockingQueue<>(GGame.MAX_ROOM_POOL_SIZE));
|
|
|
+ LinkedBlockingQueue<Room> pool = GGame.roomPool.computeIfAbsent(roomType, k -> new LinkedBlockingQueue<>(GGame.MAX_ROOM_POOL_SIZE));
|
|
|
Room room = pool.poll(); // 尝试从池中取一个对象
|
|
|
if (room == null) {
|
|
|
room = RoomFactory.createRoom(roomType); // 创建指定类型的房间
|
|
@@ -112,7 +111,7 @@ public class RoomManager {
|
|
|
}
|
|
|
// 清理房间对象状态
|
|
|
room.reset();
|
|
|
- LinkedBlockingQueue<Room> pool = poolMap.computeIfAbsent(roomType, k -> new LinkedBlockingQueue<>(GGame.MAX_ROOM_POOL_SIZE));
|
|
|
+ LinkedBlockingQueue<Room> pool = GGame.roomPool.computeIfAbsent(roomType, k -> new LinkedBlockingQueue<>(GGame.MAX_ROOM_POOL_SIZE));
|
|
|
// 如果池未满,则放回池中
|
|
|
if (pool.size() < GGame.MAX_ROOM_POOL_SIZE) {
|
|
|
pool.offer(room);
|