Procházet zdrojové kódy

BETA: Reworking `L2World`:
* Removing custom implementation for thread-safe Trove maps, `L2TIntObjectHashMap`.
* Replaced `TObjectProcedure` with `IL2Procedure`.
* Using proper lazy initialization for disabled skills.
* This should address the problem with `null` values in maps.
* Reported by: nBd, lucan
* Closing #6642

Reviewed by: Nos

Zoey76 před 11 roky
rodič
revize
b83aa01c44
22 změnil soubory, kde provedl 146 přidání a 606 odebrání
  1. 3 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/LoginServerThread.java
  2. 4 5
      L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSigns.java
  3. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSignsFestival.java
  4. 3 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/Shutdown.java
  5. 27 28
      L2J_Server_BETA/java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java
  6. 1 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/OfflineTradersTable.java
  7. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/BoatManager.java
  8. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java
  9. 3 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/ZoneManager.java
  10. 69 85
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2World.java
  11. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Attackable.java
  12. 10 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java
  13. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java
  14. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Fort.java
  15. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/L2Event.java
  16. 2 4
      L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/clanhall/ClanHallSiegeEngine.java
  17. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStartPledgeWar.java
  18. 2 3
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStopPledgeWar.java
  19. 2 2
      L2J_Server_BETA/java/com/l2jserver/gameserver/network/gameserverpackets/PlayerInGame.java
  20. 1 1
      L2J_Server_BETA/java/com/l2jserver/gameserver/taskmanager/KnownListUpdateTaskManager.java
  21. 5 6
      L2J_Server_BETA/java/com/l2jserver/gameserver/util/Broadcast.java
  22. 0 436
      L2J_Server_BETA/java/com/l2jserver/gameserver/util/L2TIntObjectHashMap.java

+ 3 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/LoginServerThread.java

@@ -289,13 +289,12 @@ public class LoginServerThread extends Thread
 							sendPacket(st);
 							if (L2World.getInstance().getAllPlayersCount() > 0)
 							{
-								FastList<String> playerList = new FastList<>();
-								for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
+								final List<String> playerList = new ArrayList<>();
+								for (L2PcInstance player : L2World.getInstance().getPlayers())
 								{
 									playerList.add(player.getAccountName());
 								}
-								PlayerInGame pig = new PlayerInGame(playerList);
-								sendPacket(pig);
+								sendPacket(new PlayerInGame(playerList));
 							}
 							break;
 						case 0x03:

+ 4 - 5
L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSigns.java

@@ -45,14 +45,13 @@ import com.l2jserver.gameserver.model.StatsSet;
 import com.l2jserver.gameserver.model.TeleportWhereType;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Castle;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SSQInfo;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Broadcast;
 
-import gnu.trove.procedure.TObjectProcedure;
-
 /**
  * Seven Signs engine.
  * @author Tempy
@@ -1436,7 +1435,7 @@ public class SevenSigns
 		L2World.getInstance().forEachPlayer(new TeleLosingCabalFromDungeons(compWinner));
 	}
 	
-	private final class TeleLosingCabalFromDungeons implements TObjectProcedure<L2PcInstance>
+	private final class TeleLosingCabalFromDungeons implements IL2Procedure<L2PcInstance>
 	{
 		private final String _cmpWinner;
 		
@@ -1667,7 +1666,7 @@ public class SevenSigns
 		L2World.getInstance().forEachPlayer(new GiveCPMult(StrifeOwner));
 	}
 	
-	private final class GiveCPMult implements TObjectProcedure<L2PcInstance>
+	private final class GiveCPMult implements IL2Procedure<L2PcInstance>
 	{
 		private final int _strifeOwner;
 		
@@ -1705,7 +1704,7 @@ public class SevenSigns
 		L2World.getInstance().forEachPlayer(new RemoveCPMult());
 	}
 	
-	protected final class RemoveCPMult implements TObjectProcedure<L2PcInstance>
+	protected final class RemoveCPMult implements IL2Procedure<L2PcInstance>
 	{
 		@Override
 		public final boolean execute(final L2PcInstance character)

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/SevenSignsFestival.java

@@ -54,6 +54,7 @@ import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2FestivalMonsterInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.network.NpcStringId;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -64,8 +65,6 @@ import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 
-import gnu.trove.procedure.TObjectProcedure;
-
 /**
  * Seven Signs Festival of Darkness Engine.<br>
  * TODO:<br>
@@ -2472,7 +2471,7 @@ public class SevenSignsFestival implements SpawnListener
 		}
 	}
 	
-	protected final class ForEachPlayerRemoveUnusedBloodOfferings implements TObjectProcedure<L2PcInstance>
+	protected final class ForEachPlayerRemoveUnusedBloodOfferings implements IL2Procedure<L2PcInstance>
 	{
 		@Override
 		public final boolean execute(final L2PcInstance onlinePlayer)

+ 3 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/Shutdown.java

@@ -38,6 +38,7 @@ import com.l2jserver.gameserver.instancemanager.RaidBossSpawnManager;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.entity.Hero;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.olympiad.Olympiad;
 import com.l2jserver.gameserver.network.L2GameClient;
 import com.l2jserver.gameserver.network.SystemMessageId;
@@ -47,8 +48,6 @@ import com.l2jserver.gameserver.network.serverpackets.ServerClose;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.util.Broadcast;
 
-import gnu.trove.procedure.TObjectProcedure;
-
 /**
  * This class provides the functions for shutting down and restarting the server.<br>
  * It closes all open client connections and saves all data.
@@ -580,10 +579,10 @@ public class Shutdown extends Thread
 	 */
 	private void disconnectAllCharacters()
 	{
-		L2World.getInstance().getAllPlayers().safeForEachValue(new DisconnectAllCharacters());
+		L2World.getInstance().forEachPlayer(new DisconnectAllCharacters());
 	}
 	
-	protected final class DisconnectAllCharacters implements TObjectProcedure<L2PcInstance>
+	protected final class DisconnectAllCharacters implements IL2Procedure<L2PcInstance>
 	{
 		private final Logger _log = Logger.getLogger(DisconnectAllCharacters.class.getName());
 		

+ 27 - 28
L2J_Server_BETA/java/com/l2jserver/gameserver/communitybbs/Manager/RegionBBSManager.java

@@ -18,14 +18,16 @@
  */
 package com.l2jserver.gameserver.communitybbs.Manager;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.logging.Level;
 import java.util.logging.LogRecord;
 import java.util.logging.Logger;
 
-import javolution.util.FastList;
 import javolution.util.FastMap;
 
 import com.l2jserver.Config;
@@ -43,8 +45,6 @@ import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.util.StringUtil;
 
-import gnu.trove.iterator.TIntObjectIterator;
-
 public class RegionBBSManager extends BaseBBSManager
 {
 	private static Logger _logChat = Logger.getLogger("chat");
@@ -58,6 +58,11 @@ public class RegionBBSManager extends BaseBBSManager
 		}
 	};
 	
+	private int _onlineCount = 0;
+	private int _onlineCountGm = 0;
+	private static Map<Integer, List<L2PcInstance>> _onlinePlayers = new FastMap<Integer, List<L2PcInstance>>().shared();
+	private static Map<Integer, Map<String, String>> _communityPages = new FastMap<Integer, Map<String, String>>().shared();
+	
 	@Override
 	public void parsecmd(String command, L2PcInstance activeChar)
 	{
@@ -270,35 +275,20 @@ public class RegionBBSManager extends BaseBBSManager
 		
 	}
 	
-	private int _onlineCount = 0;
-	private int _onlineCountGm = 0;
-	private static FastMap<Integer, FastList<L2PcInstance>> _onlinePlayers = new FastMap<Integer, FastList<L2PcInstance>>().shared();
-	private static FastMap<Integer, FastMap<String, String>> _communityPages = new FastMap<Integer, FastMap<String, String>>().shared();
-	
-	/**
-	 * Gets the single instance of RegionBBSManager.
-	 * @return single instance of RegionBBSManager
-	 */
-	public static RegionBBSManager getInstance()
-	{
-		return SingletonHolder._instance;
-	}
-	
 	/**
 	 * Change community board.
 	 */
 	public void changeCommunityBoard()
 	{
-		final FastList<L2PcInstance> sortedPlayers = new FastList<>();
-		final TIntObjectIterator<L2PcInstance> it = L2World.getInstance().getAllPlayers().iterator();
-		while (it.hasNext())
+		final List<L2PcInstance> sortedPlayers = new ArrayList<>();
+		for (L2PcInstance player : L2World.getInstance().getPlayers())
 		{
-			it.advance();
-			if (it.value() != null)
+			if (player != null)
 			{
-				sortedPlayers.add(it.value());
+				sortedPlayers.add(player);
 			}
 		}
+		
 		Collections.sort(sortedPlayers, PLAYER_NAME_COMPARATOR);
 		
 		_onlinePlayers.clear();
@@ -322,7 +312,7 @@ public class RegionBBSManager extends BaseBBSManager
 	{
 		boolean added = false;
 		
-		for (FastList<L2PcInstance> page : _onlinePlayers.values())
+		for (List<L2PcInstance> page : _onlinePlayers.values())
 		{
 			if (page.size() < Config.NAME_PAGE_SIZE_COMMUNITYBOARD)
 			{
@@ -347,7 +337,7 @@ public class RegionBBSManager extends BaseBBSManager
 		
 		if (!added)
 		{
-			FastList<L2PcInstance> temp = new FastList<>();
+			List<L2PcInstance> temp = new ArrayList<>();
 			int page = _onlinePlayers.size() + 1;
 			if (temp.add(player))
 			{
@@ -375,9 +365,9 @@ public class RegionBBSManager extends BaseBBSManager
 		
 		for (int page : _onlinePlayers.keySet())
 		{
-			FastMap<String, String> communityPage = new FastMap<>();
+			Map<String, String> communityPage = new FastMap<>();
 			htmlCode.setLength(0);
-			StringUtil.append(htmlCode, "<html><body><br><table>" + trOpen + "<td align=left valign=top>Server Restarted: ", String.valueOf(GameServer.dateTimeServerStarted.getTime()), tdClose + trClose + "</table><table>" + trOpen + tdOpen + "XP Rate: x", String.valueOf(Config.RATE_XP), tdClose + colSpacer + tdOpen + "Party XP Rate: x", String.valueOf(Config.RATE_XP * Config.RATE_PARTY_XP), tdClose + colSpacer + tdOpen + "XP Exponent: ", String.valueOf(Config.ALT_GAME_EXPONENT_XP), tdClose + trClose + trOpen + tdOpen + "SP Rate: x", String.valueOf(Config.RATE_SP), tdClose + colSpacer + tdOpen + "Party SP Rate: x", String.valueOf(Config.RATE_SP * Config.RATE_PARTY_SP), tdClose + colSpacer + tdOpen + "SP Exponent: ", String.valueOf(Config.ALT_GAME_EXPONENT_SP), tdClose + trClose + trOpen + tdOpen + "Drop Rate: ", String.valueOf(Config.RATE_DROP_ITEMS), tdClose + colSpacer + tdOpen + "Spoil Rate: ", String.valueOf(Config.RATE_DROP_SPOIL), tdClose + colSpacer + tdOpen + "Adena Rate: ", String.valueOf(Config.RATE_DROP_ITEMS_ID.get(PcInventory.ADENA_ID)), tdClose + trClose + "</table><table>" + trOpen + "<td><img src=\"sek.cbui355\" width=600 height=1><br></td>" + trClose + trOpen + tdOpen, String.valueOf(L2World.getInstance().getAllVisibleObjectsCount()), " Object count</td>" + trClose + trOpen + tdOpen, String.valueOf(getOnlineCount("gm")), " Player(s) Online</td>" + trClose + "</table>");
+			StringUtil.append(htmlCode, "<html><body><br><table>" + trOpen + "<td align=left valign=top>Server Restarted: ", String.valueOf(GameServer.dateTimeServerStarted.getTime()), tdClose + trClose + "</table><table>" + trOpen + tdOpen + "XP Rate: x", String.valueOf(Config.RATE_XP), tdClose + colSpacer + tdOpen + "Party XP Rate: x", String.valueOf(Config.RATE_XP * Config.RATE_PARTY_XP), tdClose + colSpacer + tdOpen + "XP Exponent: ", String.valueOf(Config.ALT_GAME_EXPONENT_XP), tdClose + trClose + trOpen + tdOpen + "SP Rate: x", String.valueOf(Config.RATE_SP), tdClose + colSpacer + tdOpen + "Party SP Rate: x", String.valueOf(Config.RATE_SP * Config.RATE_PARTY_SP), tdClose + colSpacer + tdOpen + "SP Exponent: ", String.valueOf(Config.ALT_GAME_EXPONENT_SP), tdClose + trClose + trOpen + tdOpen + "Drop Rate: ", String.valueOf(Config.RATE_DROP_ITEMS), tdClose + colSpacer + tdOpen + "Spoil Rate: ", String.valueOf(Config.RATE_DROP_SPOIL), tdClose + colSpacer + tdOpen + "Adena Rate: ", String.valueOf(Config.RATE_DROP_ITEMS_ID.get(PcInventory.ADENA_ID)), tdClose + trClose + "</table><table>" + trOpen + "<td><img src=\"sek.cbui355\" width=600 height=1><br></td>" + trClose + trOpen + tdOpen, String.valueOf(L2World.getInstance().getVisibleObjectsCount()), " Object count</td>" + trClose + trOpen + tdOpen, String.valueOf(getOnlineCount("gm")), " Player(s) Online</td>" + trClose + "</table>");
 			
 			int cell = 0;
 			if (Config.BBS_SHOW_PLAYERLIST)
@@ -562,7 +552,7 @@ public class RegionBBSManager extends BaseBBSManager
 	 * @param page the page
 	 * @return the online players
 	 */
-	private FastList<L2PcInstance> getOnlinePlayers(int page)
+	private List<L2PcInstance> getOnlinePlayers(int page)
 	{
 		return _onlinePlayers.get(page);
 	}
@@ -583,6 +573,15 @@ public class RegionBBSManager extends BaseBBSManager
 		return null;
 	}
 	
+	/**
+	 * Gets the single instance of RegionBBSManager.
+	 * @return single instance of RegionBBSManager
+	 */
+	public static RegionBBSManager getInstance()
+	{
+		return SingletonHolder._instance;
+	}
+	
 	private static class SingletonHolder
 	{
 		protected static final RegionBBSManager _instance = new RegionBBSManager();

+ 1 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/datatables/OfflineTradersTable.java

@@ -60,8 +60,7 @@ public class OfflineTradersTable
 			stm2.execute();
 			con.setAutoCommit(false); // avoid halfway done
 			
-			// TextBuilder items = TextBuilder.newInstance();
-			for (L2PcInstance pc : L2World.getInstance().getAllPlayersArray())
+			for (L2PcInstance pc : L2World.getInstance().getPlayers())
 			{
 				try
 				{

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/BoatManager.java

@@ -30,10 +30,9 @@ import com.l2jserver.gameserver.model.VehiclePathPoint;
 import com.l2jserver.gameserver.model.actor.instance.L2BoatInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2CharTemplate;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 
-import gnu.trove.procedure.TObjectProcedure;
-
 public class BoatManager
 {
 	private final Map<Integer, L2BoatInstance> _boats = new FastMap<>();
@@ -180,7 +179,7 @@ public class BoatManager
 		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastPackets(point1, point2, packets));
 	}
 	
-	private final class ForEachPlayerBroadcastPackets implements TObjectProcedure<L2PcInstance>
+	private final class ForEachPlayerBroadcastPackets implements IL2Procedure<L2PcInstance>
 	{
 		VehiclePathPoint _point1, _point2;
 		L2GameServerPacket[] _packets;

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/TerritoryWarManager.java

@@ -1297,7 +1297,7 @@ public final class TerritoryWarManager implements Siegable
 		{
 			if (isTWInProgress())
 			{
-				for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
+				for (L2PcInstance player : L2World.getInstance().getPlayers())
 				{
 					if ((player != null) && (player.getSiegeSide() > 0))
 					{

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/instancemanager/ZoneManager.java

@@ -73,7 +73,7 @@ public final class ZoneManager extends DocumentParser
 	{
 		// Get the world regions
 		int count = 0;
-		final L2WorldRegion[][] worldRegions = L2World.getInstance().getAllWorldRegions();
+		final L2WorldRegion[][] worldRegions = L2World.getInstance().getWorldRegions();
 		
 		// Backup old zone settings
 		for (Map<Integer, ? extends L2ZoneType> map : _classZones.values())
@@ -103,7 +103,7 @@ public final class ZoneManager extends DocumentParser
 		load();
 		
 		// Re-validate all characters in zones
-		for (L2Object obj : L2World.getInstance().getAllVisibleObjectsArray())
+		for (L2Object obj : L2World.getInstance().getVisibleObjects())
 		{
 			if (obj instanceof L2Character)
 			{
@@ -117,7 +117,7 @@ public final class ZoneManager extends DocumentParser
 	protected void parseDocument()
 	{
 		// Get the world regions
-		final L2WorldRegion[][] worldRegions = L2World.getInstance().getAllWorldRegions();
+		final L2WorldRegion[][] worldRegions = L2World.getInstance().getWorldRegions();
 		NamedNodeMap attrs;
 		Node attribute;
 		String zoneName;

+ 69 - 85
L2J_Server_BETA/java/com/l2jserver/gameserver/model/L2World.java

@@ -22,6 +22,7 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -31,30 +32,19 @@ import com.l2jserver.gameserver.datatables.CharNameTable;
 import com.l2jserver.gameserver.model.actor.L2Playable;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
-import com.l2jserver.gameserver.util.L2TIntObjectHashMap;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.util.Point3D;
 import com.l2jserver.util.StringUtil;
 
-import gnu.trove.procedure.TObjectProcedure;
-
-/**
- * This class ...
- * @version $Revision: 1.21.2.5.2.7 $ $Date: 2005/03/27 15:29:32 $
- */
 public final class L2World
 {
-	private static Logger _log = Logger.getLogger(L2World.class.getName());
-	
-	/**
-	 * Gracia border Flying objects not allowed to the east of it.
-	 */
+	private static final Logger _log = Logger.getLogger(L2World.class.getName());
+	/** Gracia border Flying objects not allowed to the east of it. */
 	public static final int GRACIA_MAX_X = -166168;
 	public static final int GRACIA_MAX_Z = 6105;
 	public static final int GRACIA_MIN_Z = -895;
 	
-	/*
-	 * biteshift, defines number of regions note, shifting by 15 will result in regions corresponding to map tiles shifting by 12 divides one tile to 8x8 regions
-	 */
+	/** Biteshift, defines number of regions note, shifting by 15 will result in regions corresponding to map tiles shifting by 12 divides one tile to 8x8 regions. */
 	public static final int SHIFT_BY = 12;
 	
 	private static final int TILE_SIZE = 32768;
@@ -73,43 +63,30 @@ public final class L2World
 	private static final int REGIONS_X = (MAP_MAX_X >> SHIFT_BY) + OFFSET_X;
 	private static final int REGIONS_Y = (MAP_MAX_Y >> SHIFT_BY) + OFFSET_Y;
 	
-	// private FastMap<String, L2PcInstance> _allGms;
-	
-	/** HashMap(Integer Player id, L2PcInstance) containing all the players in game */
-	private final L2TIntObjectHashMap<L2PcInstance> _allPlayers;
-	
-	/** L2ObjectHashMap(L2Object) containing all visible objects */
-	private final L2TIntObjectHashMap<L2Object> _allObjects;
-	private final L2TIntObjectHashMap<String> _allObjectsDebug;
-	
-	/** List with the pets instances and their owner id */
-	private final L2TIntObjectHashMap<L2PetInstance> _petsInstance;
+	/** Map containing all the players in game. */
+	private final Map<Integer, L2PcInstance> _allPlayers = new ConcurrentHashMap<>();
+	/** Map containing all visible objects. */
+	private final Map<Integer, L2Object> _allObjects = new ConcurrentHashMap<>();
+	/** Map used for debug. */
+	private final Map<Integer, String> _allObjectsDebug = new ConcurrentHashMap<>();
+	/** Map with the pets instances and their owner ID. */
+	private final Map<Integer, L2PetInstance> _petsInstance = new ConcurrentHashMap<>();
 	
 	private L2WorldRegion[][] _worldRegions;
 	
-	/**
-	 * Constructor of L2World.
-	 */
+	/** Constructor of L2World. */
 	protected L2World()
 	{
-		_allPlayers = new L2TIntObjectHashMap<>();
-		_allObjects = new L2TIntObjectHashMap<>();
-		_allObjectsDebug = new L2TIntObjectHashMap<>();
-		_petsInstance = new L2TIntObjectHashMap<>();
-		
 		initRegions();
 	}
 	
 	/**
-	 * @return the current instance of L2World.
-	 */
-	public static L2World getInstance()
-	{
-		return SingletonHolder._instance;
-	}
-	
-	/**
-	 * Add L2Object object in _allObjects. <B><U> Example of use </U> :</B> <li>Withdraw an item from the warehouse, create an item</li> <li>Spawn a L2Character (PC, NPC, Pet)</li><BR>
+	 * Adds an object to the world.<br>
+	 * <B><U>Example of use</U>:</B>
+	 * <ul>
+	 * <li>Withdraw an item from the warehouse, create an item</li>
+	 * <li>Spawn a L2Character (PC, NPC, Pet)</li>
+	 * </ul>
 	 * @param object
 	 */
 	public void storeObject(L2Object object)
@@ -129,8 +106,14 @@ public final class L2World
 	}
 	
 	/**
-	 * Remove L2Object object from _allObjects of L2World. <B><U> Example of use </U> :</B> <li>Delete item from inventory, tranfer Item from inventory to warehouse</li> <li>Crystallize item</li> <li>Remove NPC/PC/Pet from the world</li><BR>
-	 * @param object L2Object to remove from _allObjects of L2World
+	 * Removes an object from the world.<br>
+	 * <B><U>Example of use</U>:</B>
+	 * <ul>
+	 * <li>Delete item from inventory, transfer Item from inventory to warehouse</li>
+	 * <li>Crystallize item</li>
+	 * <li>Remove NPC/PC/Pet from the world</li>
+	 * </ul>
+	 * @param object the object to remove
 	 */
 	public void removeObject(L2Object object)
 	{
@@ -160,7 +143,10 @@ public final class L2World
 	}
 	
 	/**
-	 * <B><U> Example of use </U> :</B> <li>Client packets : Action, AttackRequest, RequestJoinParty, RequestJoinPledge...</li>
+	 * <B><U> Example of use</U>:</B>
+	 * <ul>
+	 * <li>Client packets : Action, AttackRequest, RequestJoinParty, RequestJoinPledge...</li>
+	 * </ul>
 	 * @param oID Identifier of the L2Object
 	 * @return the L2Object object that belongs to an ID or null if no object found.
 	 */
@@ -169,46 +155,40 @@ public final class L2World
 		return _allObjects.get(oID);
 	}
 	
-	public final L2Object[] getAllVisibleObjectsArray()
-	{
-		return _allObjects.values(new L2Object[0]);
-	}
-	
-	public final boolean forEachObject(final TObjectProcedure<L2Object> proc)
+	public Collection<L2Object> getVisibleObjects()
 	{
-		return _allObjects.forEachValue(proc);
+		return _allObjects.values();
 	}
 	
 	/**
 	 * Get the count of all visible objects in world.
 	 * @return count off all L2World objects
 	 */
-	public final int getAllVisibleObjectsCount()
+	public int getVisibleObjectsCount()
 	{
 		return _allObjects.size();
 	}
 	
-	/**
-	 * @return a table containing all GMs.
-	 */
 	public List<L2PcInstance> getAllGMs()
 	{
 		return AdminTable.getInstance().getAllGms(true);
 	}
 	
-	public L2TIntObjectHashMap<L2PcInstance> getAllPlayers()
-	{
-		return _allPlayers;
-	}
-	
-	public final L2PcInstance[] getAllPlayersArray()
+	public Collection<L2PcInstance> getPlayers()
 	{
-		return _allPlayers.values(new L2PcInstance[0]);
+		return _allPlayers.values();
 	}
 	
-	public final boolean forEachPlayer(final TObjectProcedure<L2PcInstance> proc)
+	public boolean forEachPlayer(IL2Procedure<L2PcInstance> procedure)
 	{
-		return _allPlayers.forEachValue(proc);
+		for (L2PcInstance player : _allPlayers.values())
+		{
+			if (!procedure.execute(player))
+			{
+				return false;
+			}
+		}
+		return true;
 	}
 	
 	/**
@@ -290,23 +270,21 @@ public final class L2World
 	 */
 	public void addVisibleObject(L2Object object, L2WorldRegion newRegion)
 	{
-		// If selected L2Object is a L2PcIntance, add it in L2ObjectHashSet(L2PcInstance) _allPlayers of L2World
-		// XXX TODO: this code should be obsoleted by protection in putObject func...
+		// TODO: this code should be obsoleted by protection in putObject func...
 		if (object.isPlayer())
 		{
 			L2PcInstance player = object.getActingPlayer();
-			
 			if (!player.isTeleporting())
 			{
-				L2PcInstance tmp = getPlayer(player.getObjectId());
-				if (tmp != null)
+				final L2PcInstance old = getPlayer(player.getObjectId());
+				if (old != null)
 				{
 					_log.warning("Duplicate character!? Closing both characters (" + player.getName() + ")");
 					player.logout();
-					tmp.logout();
+					old.logout();
 					return;
 				}
-				addToAllPlayers(player);
+				addPlayerToWorld(player);
 			}
 		}
 		
@@ -345,21 +323,21 @@ public final class L2World
 	}
 	
 	/**
-	 * Add the L2PcInstance to _allPlayers of L2World.
-	 * @param cha
+	 * Adds the player to the world.
+	 * @param player the player to add
 	 */
-	public void addToAllPlayers(L2PcInstance cha)
+	public void addPlayerToWorld(L2PcInstance player)
 	{
-		_allPlayers.put(cha.getObjectId(), cha);
+		_allPlayers.put(player.getObjectId(), player);
 	}
 	
 	/**
-	 * Remove the L2PcInstance from _allPlayers of L2World. <B><U> Example of use </U> :</B> <li>Remove a player from the visible objects</li><BR>
-	 * @param cha
+	 * Remove the player from the world.
+	 * @param player the player to remove
 	 */
-	public void removeFromAllPlayers(L2PcInstance cha)
+	public void removeFromAllPlayers(L2PcInstance player)
 	{
-		_allPlayers.remove(cha.getObjectId());
+		_allPlayers.remove(player.getObjectId());
 	}
 	
 	/**
@@ -564,7 +542,6 @@ public final class L2World
 	public List<L2Playable> getVisiblePlayable(L2Object object)
 	{
 		L2WorldRegion reg = object.getWorldRegion();
-		
 		if (reg == null)
 		{
 			return null;
@@ -618,7 +595,7 @@ public final class L2World
 	 * Returns the whole 2d array containing the world regions used by ZoneData.java to setup zones inside the world regions
 	 * @return
 	 */
-	public L2WorldRegion[][] getAllWorldRegions()
+	public L2WorldRegion[][] getWorldRegions()
 	{
 		return _worldRegions;
 	}
@@ -635,8 +612,7 @@ public final class L2World
 	}
 	
 	/**
-	 * Init each L2WorldRegion and their surrounding table. <B><U> Concept</U> :</B> All surrounding L2WorldRegion are identified in <B>_surroundingRegions</B> of the selected L2WorldRegion in order to scan a large area around a L2Object <B><U> Example of use </U> :</B> <li>Constructor of L2World</li>
-	 * <BR>
+	 * Initialize the world regions.
 	 */
 	private void initRegions()
 	{
@@ -687,6 +663,14 @@ public final class L2World
 		_log.info("All visible NPC's deleted.");
 	}
 	
+	/**
+	 * @return the current instance of L2World
+	 */
+	public static L2World getInstance()
+	{
+		return SingletonHolder._instance;
+	}
+	
 	private static class SingletonHolder
 	{
 		protected static final L2World _instance = new L2World();

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Attackable.java

@@ -69,7 +69,6 @@ import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 import com.l2jserver.gameserver.taskmanager.DecayTaskManager;
-import com.l2jserver.gameserver.util.L2TIntObjectHashMap;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 
@@ -100,7 +99,7 @@ public class L2Attackable extends L2Npc
 	
 	private boolean _absorbed;
 	
-	private final L2TIntObjectHashMap<AbsorberInfo> _absorbersList = new L2TIntObjectHashMap<>();
+	private final Map<Integer, AbsorberInfo> _absorbersList = new ConcurrentHashMap<>();
 	
 	private boolean _mustGiveExpSp;
 	
@@ -2161,7 +2160,7 @@ public class L2Attackable extends L2Npc
 		_absorbersList.clear();
 	}
 	
-	public L2TIntObjectHashMap<AbsorberInfo> getAbsorbersList()
+	public Map<Integer, AbsorberInfo> getAbsorbersList()
 	{
 		return _absorbersList;
 	}

+ 10 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/L2Character.java

@@ -26,6 +26,7 @@ import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.Future;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.logging.Level;
@@ -135,7 +136,6 @@ import com.l2jserver.gameserver.network.serverpackets.TeleportToLocation;
 import com.l2jserver.gameserver.pathfinding.AbstractNodeLoc;
 import com.l2jserver.gameserver.pathfinding.PathFinding;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
-import com.l2jserver.gameserver.util.L2TIntObjectHashMap;
 import com.l2jserver.gameserver.util.Point3D;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
@@ -3488,7 +3488,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 	}
 	
 	/** Table containing all skillId that are disabled */
-	protected L2TIntObjectHashMap<Long> _disabledSkills;
+	protected Map<Integer, Long> _disabledSkills;
 	private boolean _allSkillsDisabled;
 	
 	// private int _flyingRunSpeed;
@@ -6178,7 +6178,7 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		
 	}
 	
-	public L2TIntObjectHashMap<Long> getDisabledSkills()
+	public Map<Integer, Long> getDisabledSkills()
 	{
 		return _disabledSkills;
 	}
@@ -6213,7 +6213,13 @@ public abstract class L2Character extends L2Object implements ISkillsHolder, IDe
 		
 		if (_disabledSkills == null)
 		{
-			_disabledSkills = new L2TIntObjectHashMap<>();
+			synchronized (this)
+			{
+				if (_disabledSkills == null)
+				{
+					_disabledSkills = new ConcurrentHashMap<>();
+				}
+			}
 		}
 		
 		_disabledSkills.put(Integer.valueOf(skill.getReuseHashCode()), delay > 10 ? System.currentTimeMillis() + delay : Long.MAX_VALUE);

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2SepulcherNpcInstance.java

@@ -30,6 +30,7 @@ import com.l2jserver.gameserver.instancemanager.FourSepulchersManager;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
 import com.l2jserver.gameserver.model.quest.Quest;
 import com.l2jserver.gameserver.network.NpcStringId;
@@ -41,8 +42,6 @@ import com.l2jserver.gameserver.network.serverpackets.SocialAction;
 import com.l2jserver.gameserver.util.Util;
 import com.l2jserver.util.Rnd;
 
-import gnu.trove.procedure.TObjectProcedure;
-
 /**
  * @author sandman
  */
@@ -440,7 +439,7 @@ public class L2SepulcherNpcInstance extends L2Npc
 		L2World.getInstance().forEachPlayer(new SayInShout(this, new CreatureSay(0, Say2.NPC_SHOUT, getName(), msg)));
 	}
 	
-	private final class SayInShout implements TObjectProcedure<L2PcInstance>
+	private final class SayInShout implements IL2Procedure<L2PcInstance>
 	{
 		L2SepulcherNpcInstance _npc;
 		CreatureSay _sm;

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/Fort.java

@@ -59,6 +59,7 @@ import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.actor.instance.L2StaticObjectInstance;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
 import com.l2jserver.gameserver.model.skills.L2Skill;
 import com.l2jserver.gameserver.model.zone.type.L2FortZone;
@@ -69,7 +70,6 @@ import com.l2jserver.gameserver.network.serverpackets.PledgeShowInfoUpdate;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
 import gnu.trove.map.hash.TIntIntHashMap;
-import gnu.trove.procedure.TObjectProcedure;
 
 public class Fort
 {
@@ -1427,7 +1427,7 @@ public class Fort
 		}
 	}
 	
-	private final class ForEachPlayerSendMessage implements TObjectProcedure<L2PcInstance>
+	private final class ForEachPlayerSendMessage implements IL2Procedure<L2PcInstance>
 	{
 		SystemMessage _sm;
 		

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/L2Event.java

@@ -394,7 +394,7 @@ public class L2Event
 			}
 			
 			List<L2PcInstance> temp = new FastList<>();
-			for (L2PcInstance player : L2World.getInstance().getAllPlayersArray())
+			for (L2PcInstance player : L2World.getInstance().getPlayers())
 			{
 				if (!player.isOnline())
 				{

+ 2 - 4
L2J_Server_BETA/java/com/l2jserver/gameserver/model/entity/clanhall/ClanHallSiegeEngine.java

@@ -480,10 +480,8 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
 	public final void broadcastNpcSay(final L2Npc npc, final int type, final NpcStringId messageId)
 	{
 		final NpcSay npcSay = new NpcSay(npc.getObjectId(), type, npc.getId(), messageId);
-		int sourceRegion = MapRegionManager.getInstance().getMapRegionLocId(npc);
-		final L2PcInstance[] charsInside = L2World.getInstance().getAllPlayersArray();
-		
-		for (L2PcInstance pc : charsInside)
+		final int sourceRegion = MapRegionManager.getInstance().getMapRegionLocId(npc);
+		for (L2PcInstance pc : L2World.getInstance().getPlayers())
 		{
 			if ((pc != null) && (MapRegionManager.getInstance().getMapRegionLocId(pc) == sourceRegion))
 			{

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStartPledgeWar.java

@@ -23,12 +23,11 @@ import com.l2jserver.gameserver.datatables.ClanTable;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
-import gnu.trove.procedure.TObjectProcedure;
-
 public final class RequestStartPledgeWar extends L2GameClientPacket
 {
 	private static final String _C__03_REQUESTSTARTPLEDGEWAR = "[C] 03 RequestStartPledgewar";
@@ -146,7 +145,7 @@ public final class RequestStartPledgeWar extends L2GameClientPacket
 		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastUserInfo(player, clan));
 	}
 	
-	private final class ForEachPlayerBroadcastUserInfo implements TObjectProcedure<L2PcInstance>
+	private final class ForEachPlayerBroadcastUserInfo implements IL2Procedure<L2PcInstance>
 	{
 		private final L2Clan _cln;
 		private final L2PcInstance _ply;

+ 2 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/clientpackets/RequestStopPledgeWar.java

@@ -23,12 +23,11 @@ import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.L2ClanMember;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
 import com.l2jserver.gameserver.taskmanager.AttackStanceTaskManager;
 
-import gnu.trove.procedure.TObjectProcedure;
-
 public final class RequestStopPledgeWar extends L2GameClientPacket
 {
 	private static final String _C__05_REQUESTSTOPPLEDGEWAR = "[C] 05 RequestStopPledgeWar";
@@ -114,7 +113,7 @@ public final class RequestStopPledgeWar extends L2GameClientPacket
 		L2World.getInstance().forEachPlayer(new ForEachPlayerBroadcastUserInfo(clan, player));
 	}
 	
-	private final class ForEachPlayerBroadcastUserInfo implements TObjectProcedure<L2PcInstance>
+	private final class ForEachPlayerBroadcastUserInfo implements IL2Procedure<L2PcInstance>
 	{
 		private final L2PcInstance _player;
 		private final L2Clan _cln;

+ 2 - 2
L2J_Server_BETA/java/com/l2jserver/gameserver/network/gameserverpackets/PlayerInGame.java

@@ -18,7 +18,7 @@
  */
 package com.l2jserver.gameserver.network.gameserverpackets;
 
-import javolution.util.FastList;
+import java.util.List;
 
 import com.l2jserver.util.network.BaseSendablePacket;
 
@@ -34,7 +34,7 @@ public class PlayerInGame extends BaseSendablePacket
 		writeS(player);
 	}
 	
-	public PlayerInGame(FastList<String> players)
+	public PlayerInGame(List<String> players)
 	{
 		writeC(0x02);
 		writeH(players.size());

+ 1 - 1
L2J_Server_BETA/java/com/l2jserver/gameserver/taskmanager/KnownListUpdateTaskManager.java

@@ -63,7 +63,7 @@ public class KnownListUpdateTaskManager
 			try
 			{
 				boolean failed;
-				for (L2WorldRegion regions[] : L2World.getInstance().getAllWorldRegions())
+				for (L2WorldRegion regions[] : L2World.getInstance().getWorldRegions())
 				{
 					for (L2WorldRegion r : regions) // go through all world regions
 					{

+ 5 - 6
L2J_Server_BETA/java/com/l2jserver/gameserver/util/Broadcast.java

@@ -25,14 +25,13 @@ import java.util.logging.Logger;
 import com.l2jserver.gameserver.model.L2World;
 import com.l2jserver.gameserver.model.actor.L2Character;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.interfaces.IL2Procedure;
 import com.l2jserver.gameserver.network.clientpackets.Say2;
 import com.l2jserver.gameserver.network.serverpackets.CharInfo;
 import com.l2jserver.gameserver.network.serverpackets.CreatureSay;
 import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
 import com.l2jserver.gameserver.network.serverpackets.RelationChanged;
 
-import gnu.trove.procedure.TObjectProcedure;
-
 /**
  * This class ...
  * @version $Revision: 1.2 $ $Date: 2004/06/27 08:12:59 $
@@ -209,7 +208,7 @@ public final class Broadcast
 		L2World.getInstance().forEachPlayer(new ForEachPlayerInInstanceBroadcast(mov, instanceId));
 	}
 	
-	private static final class ForEachPlayerBroadcast implements TObjectProcedure<L2PcInstance>
+	private static final class ForEachPlayerBroadcast implements IL2Procedure<L2PcInstance>
 	{
 		L2GameServerPacket _packet;
 		
@@ -229,10 +228,10 @@ public final class Broadcast
 		}
 	}
 	
-	private static final class ForEachPlayerInInstanceBroadcast implements TObjectProcedure<L2PcInstance>
+	private static final class ForEachPlayerInInstanceBroadcast implements IL2Procedure<L2PcInstance>
 	{
-		L2GameServerPacket _packet;
-		int _instanceId;
+		private final L2GameServerPacket _packet;
+		private final int _instanceId;
 		
 		protected ForEachPlayerInInstanceBroadcast(L2GameServerPacket packet, int instanceId)
 		{

+ 0 - 436
L2J_Server_BETA/java/com/l2jserver/gameserver/util/L2TIntObjectHashMap.java

@@ -1,436 +0,0 @@
-/*
- * Copyright (C) 2004-2013 L2J Server
- * 
- * This file is part of L2J Server.
- * 
- * L2J Server is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- * 
- * L2J Server is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- * 
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-package com.l2jserver.gameserver.util;
-
-import java.util.Collection;
-import java.util.concurrent.locks.Lock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-
-import gnu.trove.function.TObjectFunction;
-import gnu.trove.map.hash.TIntObjectHashMap;
-import gnu.trove.procedure.TIntObjectProcedure;
-import gnu.trove.procedure.TIntProcedure;
-import gnu.trove.procedure.TObjectProcedure;
-
-/**
- * Custom extension of TIntObjectHashMap that is synchronized via ReentrantReadWriteLock.<br>
- * The purpose of this map is to replace the use of FastMap<K,V>.shared() which requires a lot of resources.
- * @author Nik
- * @param <V> value object.
- */
-public class L2TIntObjectHashMap<V extends Object> extends TIntObjectHashMap<V>
-{
-	private static final long serialVersionUID = 1L;
-	
-	private final Lock _readLock;
-	private final Lock _writeLock;
-	private boolean _tempLocksDisable;
-	
-	public L2TIntObjectHashMap()
-	{
-		super();
-		ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
-		_readLock = lock.readLock();
-		_writeLock = lock.writeLock();
-		_tempLocksDisable = false;
-	}
-	
-	@Override
-	public V put(int key, V value)
-	{
-		_writeLock.lock();
-		try
-		{
-			return super.put(key, value);
-		}
-		finally
-		{
-			_writeLock.unlock();
-		}
-	}
-	
-	/**
-	 * Unsynchronized operation, its free from any locks.<br>
-	 * Its useful while the readLock is taken by a thread<br>
-	 * (forEach operation for example)<br>
-	 * and you need to put something in the map without causing a deadlock<br>
-	 * by taking the writeLock before the readLock is unlocked.
-	 * @param key
-	 * @param value
-	 * @return
-	 */
-	public V unsynchronizedPut(int key, V value)
-	{
-		return super.put(key, value);
-	}
-	
-	@Override
-	public V get(int key)
-	{
-		if (!_tempLocksDisable)
-		{
-			_readLock.lock();
-		}
-		
-		try
-		{
-			return super.get(key);
-		}
-		finally
-		{
-			if (!_tempLocksDisable)
-			{
-				_readLock.unlock();
-			}
-		}
-	}
-	
-	@Override
-	public void clear()
-	{
-		if (!_tempLocksDisable)
-		{
-			_writeLock.lock();
-		}
-		try
-		{
-			super.clear();
-		}
-		finally
-		{
-			if (!_tempLocksDisable)
-			{
-				_writeLock.unlock();
-			}
-		}
-	}
-	
-	@Override
-	public V remove(int key)
-	{
-		if (!_tempLocksDisable)
-		{
-			_writeLock.lock();
-		}
-		try
-		{
-			return super.remove(key);
-		}
-		finally
-		{
-			if (!_tempLocksDisable)
-			{
-				_writeLock.unlock();
-			}
-		}
-	}
-	
-	/**
-	 * Unsynchronized operation, its free from any locks.<br>
-	 * Its useful while the readLock is taken by a thread (forEach operation for example)<br>
-	 * and you need to remove something in the map without causing a deadlock<br>
-	 * by taking the writeLock before the readLock is unlocked.
-	 * @param key
-	 * @return
-	 */
-	public V unsynchronizedRemove(int key)
-	{
-		return super.remove(key);
-	}
-	
-	@Override
-	public boolean equals(Object other)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.equals(other);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public Object[] values()
-	{
-		if (!_tempLocksDisable)
-		{
-			_readLock.lock();
-		}
-		try
-		{
-			return super.values();
-		}
-		finally
-		{
-			if (!_tempLocksDisable)
-			{
-				_readLock.unlock();
-			}
-		}
-	}
-	
-	@Override
-	public V[] values(V[] arg0)
-	{
-		if (!_tempLocksDisable)
-		{
-			_readLock.lock();
-		}
-		try
-		{
-			return super.values(arg0);
-		}
-		finally
-		{
-			if (!_tempLocksDisable)
-			{
-				_readLock.unlock();
-			}
-		}
-	}
-	
-	@Override
-	public Collection<V> valueCollection()
-	{
-		_readLock.lock();
-		try
-		{
-			return super.valueCollection();
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public int[] keys()
-	{
-		_readLock.lock();
-		try
-		{
-			return super.keys();
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public int[] keys(int[] arg0)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.keys(arg0);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean contains(int val)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.contains(val);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean containsValue(Object arg0)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.containsValue(arg0);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean containsKey(int key)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.containsKey(key);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean forEachKey(TIntProcedure procedure)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.forEachKey(procedure);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	/**
-	 * A safe from deadlock loop.<br>
-	 * put and remove synchronizers are disabled while this loop is running.<br>
-	 * Keep in mind that this uses writeLock instead of readLock,<br>
-	 * and its intended only if you are trying to put/remove something while looping<br>
-	 * the values of this map.
-	 * @param procedure
-	 * @return
-	 */
-	public boolean safeForEachKey(TIntProcedure procedure)
-	{
-		_writeLock.lock();
-		try
-		{
-			_tempLocksDisable = true;
-			return super.forEachKey(procedure);
-		}
-		finally
-		{
-			_tempLocksDisable = false;
-			_writeLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean forEachValue(TObjectProcedure<? super V> arg0)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.forEachValue(arg0);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	/**
-	 * A safe from deadlock loop.<br>
-	 * put and remove synchronizers are disabled while this loop is running.<br>
-	 * Keep in mind that this uses writeLock instead of readLock,<br>
-	 * and its intended only if you are trying to put/remove something while looping<br>
-	 * the values of this map.
-	 * @param arg0
-	 * @return
-	 */
-	public boolean safeForEachValue(TObjectProcedure<V> arg0)
-	{
-		_writeLock.lock();
-		try
-		{
-			_tempLocksDisable = true;
-			return super.forEachValue(arg0);
-		}
-		finally
-		{
-			_tempLocksDisable = false;
-			_writeLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean forEachEntry(TIntObjectProcedure<? super V> arg0)
-	{
-		_readLock.lock();
-		try
-		{
-			return super.forEachEntry(arg0);
-		}
-		finally
-		{
-			_readLock.unlock();
-		}
-	}
-	
-	/**
-	 * A safe from deadlock loop.<br>
-	 * put and remove synchronizers are disabled while this loop is running.<br>
-	 * Keep in mind that this uses writeLock instead of readLock, <br>
-	 * and its intended only if you are trying to put/remove something while looping<br>
-	 * the values of this map.
-	 * @param arg0
-	 * @return
-	 */
-	public boolean safeForEachEntry(TIntObjectProcedure<V> arg0)
-	{
-		_writeLock.lock();
-		try
-		{
-			_tempLocksDisable = true;
-			return super.forEachEntry(arg0);
-		}
-		finally
-		{
-			_tempLocksDisable = false;
-			_writeLock.unlock();
-		}
-	}
-	
-	@Override
-	public boolean retainEntries(TIntObjectProcedure<? super V> arg0)
-	{
-		_writeLock.lock();
-		try
-		{
-			return super.retainEntries(arg0);
-		}
-		finally
-		{
-			_writeLock.unlock();
-		}
-	}
-	
-	@Override
-	public void transformValues(TObjectFunction<V, V> arg0)
-	{
-		_writeLock.lock();
-		try
-		{
-			super.transformValues(arg0);
-		}
-		finally
-		{
-			_writeLock.unlock();
-		}
-	}
-}