feat(renderer): replace HashMap with ConcurrentHashMap for thread-safe control caching

This commit is contained in:
extio-de
2026-02-01 15:08:46 +01:00
parent 4a21be1730
commit aa8aea5eec

View File

@@ -2,9 +2,9 @@ package de.extio.game_engine.renderer.g2d.control;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@@ -15,6 +15,7 @@ import de.extio.game_engine.renderer.g2d.control.impl.G2DBaseControlImpl;
import de.extio.game_engine.renderer.g2d.control.impl.G2DButtonControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DButtonControlImpl;
import de.extio.game_engine.renderer.g2d.control.impl.G2DLabelControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DLabelControlImpl;
import de.extio.game_engine.renderer.g2d.control.impl.G2DMultiLineTextAreaControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DMultiLineTextAreaControlImpl;
import de.extio.game_engine.renderer.g2d.control.impl.G2DPopupMenuControlImpl;
import de.extio.game_engine.renderer.g2d.control.impl.G2DSetFocusControl; import de.extio.game_engine.renderer.g2d.control.impl.G2DSetFocusControl;
import de.extio.game_engine.renderer.g2d.control.impl.G2DSliderControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DSliderControlImpl;
import de.extio.game_engine.renderer.g2d.control.impl.G2DSwitchControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DSwitchControlImpl;
@@ -24,7 +25,6 @@ import de.extio.game_engine.renderer.g2d.control.impl.G2DToggleButtonControlImpl
import de.extio.game_engine.renderer.g2d.control.impl.G2DTooltipControl; import de.extio.game_engine.renderer.g2d.control.impl.G2DTooltipControl;
import de.extio.game_engine.renderer.g2d.control.impl.G2DWindowCloseButtonControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DWindowCloseButtonControlImpl;
import de.extio.game_engine.renderer.g2d.control.impl.G2DWindowPanelControlImpl; import de.extio.game_engine.renderer.g2d.control.impl.G2DWindowPanelControlImpl;
import de.extio.game_engine.renderer.g2d.control.impl.G2DPopupMenuControlImpl;
import de.extio.game_engine.renderer.model.RenderingBo; import de.extio.game_engine.renderer.model.RenderingBo;
import de.extio.game_engine.renderer.model.RenderingBoLayer; import de.extio.game_engine.renderer.model.RenderingBoLayer;
import de.extio.game_engine.renderer.model.bo.ControlRenderingBo; import de.extio.game_engine.renderer.model.bo.ControlRenderingBo;
@@ -37,9 +37,9 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen
private final static Logger LOGGER = LoggerFactory.getLogger(G2DDrawControl.class); private final static Logger LOGGER = LoggerFactory.getLogger(G2DDrawControl.class);
public static Map<String, BaseControl> CACHED_CONTROLS = new HashMap<>(); public static Map<String, BaseControl> CACHED_CONTROLS = new ConcurrentHashMap<>();
public static Map<String, List<BaseControl>> CONTROL_GROUPS = new HashMap<>(); public static Map<String, List<BaseControl>> CONTROL_GROUPS = new ConcurrentHashMap<>();
private Class<? extends BaseControl> clazz; private Class<? extends BaseControl> clazz;
@@ -218,8 +218,7 @@ public class G2DDrawControl extends G2DAbstractRenderingBo implements ControlRen
if (this.customControlConfigurations == null) { if (this.customControlConfigurations == null) {
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
final final var beans = (java.util.Collection<CustomControlConfiguration<? extends G2DBaseControlImpl>>) (java.util.Collection<?>) this.rendererData.getApplicationContext().getBeansOfType(CustomControlConfiguration.class).values();
var beans = (java.util.Collection<CustomControlConfiguration<? extends G2DBaseControlImpl>>) (java.util.Collection<?>) this.rendererData.getApplicationContext().getBeansOfType(CustomControlConfiguration.class).values();
this.customControlConfigurations = List.copyOf(beans); this.customControlConfigurations = List.copyOf(beans);
} }