From 88804849e7676ac8bb4c1249b9ddea213e971afc Mon Sep 17 00:00:00 2001 From: klu2 <172195+klu2@users.noreply.github.com> Date: Sat, 10 Aug 2024 11:40:07 +0200 Subject: [PATCH] use AtomicInteger to avoid synchronizing the whole object, convert to String using Integer.toString() --- .../SequentialIntegerIdGeneratorStrategy.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/structurizr-core/src/main/java/com/structurizr/model/SequentialIntegerIdGeneratorStrategy.java b/structurizr-core/src/main/java/com/structurizr/model/SequentialIntegerIdGeneratorStrategy.java index e8f57950c..917093335 100644 --- a/structurizr-core/src/main/java/com/structurizr/model/SequentialIntegerIdGeneratorStrategy.java +++ b/structurizr-core/src/main/java/com/structurizr/model/SequentialIntegerIdGeneratorStrategy.java @@ -1,29 +1,31 @@ package com.structurizr.model; +import java.util.concurrent.atomic.AtomicInteger; + /** * An ID generator that simply uses a sequential number when generating IDs for model elements and relationships. * This is the default ID generator; any non-numeric IDs are ignored. */ public class SequentialIntegerIdGeneratorStrategy implements IdGenerator { - private int ID = 0; + private final AtomicInteger id = new AtomicInteger(); @Override - public synchronized String generateId(Element element) { - return "" + ++ID; + public String generateId(Element element) { + return Integer.toString(id.incrementAndGet()); } @Override - public synchronized String generateId(Relationship relationship) { - return "" + ++ID; + public String generateId(Relationship relationship) { + return Integer.toString(id.incrementAndGet()); } @Override public void found(String id) { try { int idAsInt = Integer.parseInt(id); - if (idAsInt > ID) { - ID = idAsInt; + if (idAsInt > this.id.get()) { + this.id.set(idAsInt); } } catch (NumberFormatException e) { // ignore non-numeric IDs