You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by nf...@apache.org on 2024/09/05 08:15:30 UTC

(camel) branch main updated: CAMEL-20199: Remove synchronized block from components G to I (#15444)

This is an automated email from the ASF dual-hosted git repository.

nfilotto pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new b9c8f65492b CAMEL-20199: Remove synchronized block from components G to I (#15444)
b9c8f65492b is described below

commit b9c8f65492b94fbe58798b0a705fd5cc151d031c
Author: Nicolas Filotto <es...@users.noreply.github.com>
AuthorDate: Thu Sep 5 10:15:24 2024 +0200

    CAMEL-20199: Remove synchronized block from components G to I (#15444)
---
 .../component/as2/api/protocol/ResponseMDN.java    | 36 ++++----
 .../as2/internal/AS2PropertiesHelper.java          | 17 +++-
 .../component/aws2/kinesis/KinesisConnection.java  | 36 +++++---
 .../camel/component/aws2/sqs/Sqs2Consumer.java     |  9 +-
 .../bean/AbstractCamelInvocationHandler.java       | 40 +++++----
 .../box/internal/BoxPropertiesHelper.java          | 17 +++-
 .../braintree/BraintreeConfiguration.java          | 90 ++++++++++----------
 .../internal/BraintreePropertiesHelper.java        | 17 +++-
 .../java/org/apache/camel/coap/CoAPComponent.java  | 57 +++++++------
 .../java/org/apache/camel/coap/CoAPProducer.java   | 11 ++-
 .../camel/component/consul/ConsulEndpoint.java     | 19 +++--
 .../component/controlbus/ControlBusComponent.java  | 13 ++-
 .../dhis2/internal/Dhis2PropertiesHelper.java      | 17 +++-
 .../dropbox/util/DropboxPropertyManager.java       | 34 ++++----
 .../fhir/internal/FhirPropertiesHelper.java        | 17 +++-
 .../bigquery/GoogleBigQueryConnectionFactory.java  | 25 ++++--
 .../internal/GoogleCalendarPropertiesHelper.java   | 17 +++-
 .../internal/GoogleDrivePropertiesHelper.java      | 17 +++-
 .../mail/internal/GoogleMailPropertiesHelper.java  | 17 +++-
 .../internal/GoogleSheetsPropertiesHelper.java     | 17 +++-
 .../hazelcast/policy/HazelcastRoutePolicy.java     | 28 +++++--
 .../camel/http/common/DefaultHttpRegistry.java     | 42 +++++++---
 .../apache/camel/component/http/HttpEndpoint.java  | 22 +++--
 .../iec60870/AbstractConnectionMultiplexor.java    | 83 ++++++++++--------
 .../component/iec60870/AbstractIecComponent.java   |  5 +-
 .../iec60870/client/ClientConnection.java          | 39 ++++++---
 .../cluster/InfinispanEmbeddedClusterView.java     | 85 +++++++++----------
 .../cluster/InfinispanRemoteClusterView.java       | 97 ++++++++++------------
 .../apache/camel/component/irc/IrcComponent.java   | 40 +++++----
 .../utils/extensions/JmsServiceExtension.java      | 27 +++---
 30 files changed, 615 insertions(+), 376 deletions(-)

diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java
index 820c3e818f0..e4849b9bab2 100644
--- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java
+++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java
@@ -24,6 +24,8 @@ import java.security.cert.Certificate;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.camel.component.as2.api.AS2AsynchronousMDNManager;
 import org.apache.camel.component.as2.api.AS2Constants;
@@ -90,6 +92,7 @@ public class ResponseMDN implements HttpResponseInterceptor {
     private final String mdnMessageTemplate;
     private final Certificate[] validateSigningCertificateChain;
 
+    private final Lock lock = new ReentrantLock();
     private VelocityEngine velocityEngine;
 
     public ResponseMDN(String as2Version, String serverFQDN, AS2SignatureAlgorithm signingAlgorithm,
@@ -320,21 +323,26 @@ public class ResponseMDN implements HttpResponseInterceptor {
         }
     }
 
-    private synchronized VelocityEngine getVelocityEngine() {
-        if (velocityEngine == null) {
-            velocityEngine = new VelocityEngine();
-
-            // set default properties
-            Properties properties = new Properties();
-            properties.setProperty(RuntimeConstants.RESOURCE_LOADER, "file, class");
-            properties.setProperty("class.resource.loader.description", "Camel Velocity Classpath Resource Loader");
-            properties.setProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName());
-            final Logger velocityLogger = LoggerFactory.getLogger("org.apache.camel.maven.Velocity");
-            properties.setProperty(RuntimeConstants.RUNTIME_LOG_NAME, velocityLogger.getName());
-
-            velocityEngine.init(properties);
+    private VelocityEngine getVelocityEngine() {
+        lock.lock();
+        try {
+            if (velocityEngine == null) {
+                velocityEngine = new VelocityEngine();
+
+                // set default properties
+                Properties properties = new Properties();
+                properties.setProperty(RuntimeConstants.RESOURCE_LOADER, "file, class");
+                properties.setProperty("class.resource.loader.description", "Camel Velocity Classpath Resource Loader");
+                properties.setProperty("class.resource.loader.class", ClasspathResourceLoader.class.getName());
+                final Logger velocityLogger = LoggerFactory.getLogger("org.apache.camel.maven.Velocity");
+                properties.setProperty(RuntimeConstants.RUNTIME_LOG_NAME, velocityLogger.getName());
+
+                velocityEngine.init(properties);
+            }
+            return velocityEngine;
+        } finally {
+            lock.unlock();
         }
-        return velocityEngine;
     }
 
 }
diff --git a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/internal/AS2PropertiesHelper.java b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/internal/AS2PropertiesHelper.java
index 11da1548c5b..2ec7782c039 100644
--- a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/internal/AS2PropertiesHelper.java
+++ b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/internal/AS2PropertiesHelper.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.as2.internal;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.as2.AS2Configuration;
 import org.apache.camel.support.component.ApiMethodPropertiesHelper;
@@ -25,16 +28,22 @@ import org.apache.camel.support.component.ApiMethodPropertiesHelper;
  */
 public final class AS2PropertiesHelper extends ApiMethodPropertiesHelper<AS2Configuration> {
 
+    private static final Lock LOCK = new ReentrantLock();
     private static AS2PropertiesHelper helper;
 
     private AS2PropertiesHelper(CamelContext context) {
         super(context, AS2Configuration.class, AS2Constants.PROPERTY_PREFIX);
     }
 
-    public static synchronized AS2PropertiesHelper getHelper(CamelContext context) {
-        if (helper == null) {
-            helper = new AS2PropertiesHelper(context);
+    public static AS2PropertiesHelper getHelper(CamelContext context) {
+        LOCK.lock();
+        try {
+            if (helper == null) {
+                helper = new AS2PropertiesHelper(context);
+            }
+            return helper;
+        } finally {
+            LOCK.unlock();
         }
-        return helper;
     }
 }
diff --git a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/KinesisConnection.java b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/KinesisConnection.java
index c5c23f1270f..ebdc6f255ef 100644
--- a/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/KinesisConnection.java
+++ b/components/camel-aws/camel-aws2-kinesis/src/main/java/org/apache/camel/component/aws2/kinesis/KinesisConnection.java
@@ -19,6 +19,8 @@ package org.apache.camel.component.aws2.kinesis;
 import java.io.Closeable;
 import java.io.IOException;
 import java.util.Objects;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.camel.component.aws2.kinesis.client.KinesisClientFactory;
 import software.amazon.awssdk.services.kinesis.KinesisAsyncClient;
@@ -31,23 +33,33 @@ public class KinesisConnection implements Closeable {
 
     private KinesisClient kinesisClient;
     private KinesisAsyncClient kinesisAsyncClient;
+    private final Lock lock = new ReentrantLock();
 
-    public synchronized KinesisClient getClient(final Kinesis2Endpoint endpoint) {
-        if (Objects.isNull(kinesisClient)) {
-            kinesisClient = endpoint.getConfiguration().getAmazonKinesisClient() != null
-                    ? endpoint.getConfiguration().getAmazonKinesisClient()
-                    : KinesisClientFactory.getKinesisClient(endpoint.getConfiguration()).getKinesisClient();
+    public KinesisClient getClient(final Kinesis2Endpoint endpoint) {
+        lock.lock();
+        try {
+            if (Objects.isNull(kinesisClient)) {
+                kinesisClient = endpoint.getConfiguration().getAmazonKinesisClient() != null
+                        ? endpoint.getConfiguration().getAmazonKinesisClient()
+                        : KinesisClientFactory.getKinesisClient(endpoint.getConfiguration()).getKinesisClient();
+            }
+            return kinesisClient;
+        } finally {
+            lock.unlock();
         }
-        return kinesisClient;
     }
 
-    public synchronized KinesisAsyncClient getAsyncClient(final Kinesis2Endpoint endpoint) {
-        if (Objects.isNull(kinesisAsyncClient)) {
-            kinesisAsyncClient = KinesisClientFactory
-                    .getKinesisAsyncClient(endpoint.getConfiguration())
-                    .getKinesisAsyncClient();
+    public KinesisAsyncClient getAsyncClient(final Kinesis2Endpoint endpoint) {
+        lock.lock();
+        try {
+            if (Objects.isNull(kinesisAsyncClient)) {
+                kinesisAsyncClient
+                        = KinesisClientFactory.getKinesisAsyncClient(endpoint.getConfiguration()).getKinesisAsyncClient();
+            }
+            return kinesisAsyncClient;
+        } finally {
+            lock.unlock();
         }
-        return kinesisAsyncClient;
     }
 
     public void setKinesisClient(final KinesisClient kinesisClient) {
diff --git a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java
index 2bcccabfce7..4637725c20a 100644
--- a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java
+++ b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Consumer.java
@@ -40,6 +40,8 @@ import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 import java.util.regex.Pattern;
 
 import org.apache.camel.AsyncCallback;
@@ -484,7 +486,7 @@ public class Sqs2Consumer extends ScheduledBatchPollingConsumer {
          * means there is no schedule.
          */
         private final AtomicLong queueAutoCreationScheduleTime = new AtomicLong(0L);
-        private final Object mutex = new Object();
+        private final Lock lock = new ReentrantLock();
         private final AtomicBoolean closed = new AtomicBoolean();
 
         private final Clock clock;
@@ -630,7 +632,8 @@ public class Sqs2Consumer extends ScheduledBatchPollingConsumer {
         }
 
         private void createQueue(UUID requestId, PollingContext context) {
-            synchronized (mutex) {
+            lock.lock();
+            try {
                 if (isClosed() || context.isMissingQueueHandledInAnotherRequest(requestId)) {
                     // the missing queue error can be thrown by multiple threads
                     // the first thread that is handling the error should prevent other threads
@@ -648,6 +651,8 @@ public class Sqs2Consumer extends ScheduledBatchPollingConsumer {
                     LOG.error("Error while creating queue.", e);
                     context.firePollingError(e);
                 }
+            } finally {
+                lock.unlock();
             }
         }
 
diff --git a/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractCamelInvocationHandler.java b/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractCamelInvocationHandler.java
index 4cd04ab2b37..53f18b4855f 100644
--- a/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractCamelInvocationHandler.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractCamelInvocationHandler.java
@@ -30,6 +30,8 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Future;
 import java.util.concurrent.FutureTask;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.camel.Body;
 import org.apache.camel.CamelContext;
@@ -55,6 +57,7 @@ public abstract class AbstractCamelInvocationHandler implements InvocationHandle
 
     private static final Logger LOG = LoggerFactory.getLogger(AbstractCamelInvocationHandler.class);
     private static final List<Method> EXCLUDED_METHODS = new ArrayList<>();
+    private static final Lock LOCK = new ReentrantLock();
     public static final String CAMEL_INVOCATION_HANDLER = "CamelInvocationHandler";
     private static ExecutorService executorService;
     protected final Endpoint endpoint;
@@ -289,24 +292,29 @@ public abstract class AbstractCamelInvocationHandler implements InvocationHandle
         }
     }
 
-    protected static synchronized ExecutorService getExecutorService(CamelContext context) {
-        // CamelContext will shutdown thread pool when it shutdown so we can
-        // lazy create it on demand
-        // but in case of hot-deploy or the likes we need to be able to
-        // re-create it (its a shared static instance)
-        if (executorService == null || executorService.isTerminated() || executorService.isShutdown()) {
-            // try to lookup a pool first based on id/profile
-            executorService = context.getRegistry().lookupByNameAndType(CAMEL_INVOCATION_HANDLER, ExecutorService.class);
-            if (executorService == null) {
-                executorService = context.getExecutorServiceManager().newThreadPool(CamelInvocationHandler.class,
-                        CAMEL_INVOCATION_HANDLER, CAMEL_INVOCATION_HANDLER);
-            }
-            if (executorService == null) {
-                executorService = context.getExecutorServiceManager().newDefaultThreadPool(CamelInvocationHandler.class,
-                        CAMEL_INVOCATION_HANDLER);
+    protected static ExecutorService getExecutorService(CamelContext context) {
+        LOCK.lock();
+        try {
+            // CamelContext will shutdown thread pool when it shutdown so we can
+            // lazy create it on demand
+            // but in case of hot-deploy or the likes we need to be able to
+            // re-create it (its a shared static instance)
+            if (executorService == null || executorService.isTerminated() || executorService.isShutdown()) {
+                // try to lookup a pool first based on id/profile
+                executorService = context.getRegistry().lookupByNameAndType(CAMEL_INVOCATION_HANDLER, ExecutorService.class);
+                if (executorService == null) {
+                    executorService = context.getExecutorServiceManager()
+                            .newThreadPool(CamelInvocationHandler.class, CAMEL_INVOCATION_HANDLER, CAMEL_INVOCATION_HANDLER);
+                }
+                if (executorService == null) {
+                    executorService = context.getExecutorServiceManager()
+                            .newDefaultThreadPool(CamelInvocationHandler.class, CAMEL_INVOCATION_HANDLER);
+                }
             }
+            return executorService;
+        } finally {
+            LOCK.unlock();
         }
-        return executorService;
     }
 
     /**
diff --git a/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/internal/BoxPropertiesHelper.java b/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/internal/BoxPropertiesHelper.java
index ee129383351..4f559df9c2e 100644
--- a/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/internal/BoxPropertiesHelper.java
+++ b/components/camel-box/camel-box-component/src/main/java/org/apache/camel/component/box/internal/BoxPropertiesHelper.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.box.internal;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.box.BoxConfiguration;
 import org.apache.camel.support.component.ApiMethodPropertiesHelper;
@@ -25,16 +28,22 @@ import org.apache.camel.support.component.ApiMethodPropertiesHelper;
  */
 public final class BoxPropertiesHelper extends ApiMethodPropertiesHelper<BoxConfiguration> {
 
+    private static final Lock LOCK = new ReentrantLock();
     private static BoxPropertiesHelper helper;
 
     private BoxPropertiesHelper(CamelContext context) {
         super(context, BoxConfiguration.class, BoxConstants.PROPERTY_PREFIX);
     }
 
-    public static synchronized BoxPropertiesHelper getHelper(CamelContext context) {
-        if (helper == null) {
-            helper = new BoxPropertiesHelper(context);
+    public static BoxPropertiesHelper getHelper(CamelContext context) {
+        LOCK.lock();
+        try {
+            if (helper == null) {
+                helper = new BoxPropertiesHelper(context);
+            }
+            return helper;
+        } finally {
+            LOCK.unlock();
         }
-        return helper;
     }
 }
diff --git a/components/camel-braintree/src/main/java/org/apache/camel/component/braintree/BraintreeConfiguration.java b/components/camel-braintree/src/main/java/org/apache/camel/component/braintree/BraintreeConfiguration.java
index c53a93ff466..4e7bae5a481 100644
--- a/components/camel-braintree/src/main/java/org/apache/camel/component/braintree/BraintreeConfiguration.java
+++ b/components/camel-braintree/src/main/java/org/apache/camel/component/braintree/BraintreeConfiguration.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.braintree;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 import java.util.logging.Handler;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -68,6 +70,7 @@ public class BraintreeConfiguration {
     private boolean logHandlerEnabled = true;
     @UriParam(label = "advanced")
     private Integer httpReadTimeout;
+    private final Lock lock = new ReentrantLock();
 
     public BraintreeApiName getApiName() {
         return apiName;
@@ -239,50 +242,49 @@ public class BraintreeConfiguration {
     /**
      * Construct a BraintreeGateway from configuration
      */
-    synchronized BraintreeGateway newBraintreeGateway() {
-        final BraintreeGateway gateway;
-
-        if (accessToken != null) {
-            gateway = new BraintreeGateway(
-                    accessToken);
-            setEnvironment(gateway.getConfiguration().getEnvironment().getEnvironmentName());
-        } else {
-            gateway = new BraintreeGateway(
-                    getBraintreeEnvironment(),
-                    getMerchantId(),
-                    getPublicKey(),
-                    getPrivateKey());
+    BraintreeGateway newBraintreeGateway() {
+        lock.lock();
+        try {
+            final BraintreeGateway gateway;
+
+            if (accessToken != null) {
+                gateway = new BraintreeGateway(accessToken);
+                setEnvironment(gateway.getConfiguration().getEnvironment().getEnvironmentName());
+            } else {
+                gateway = new BraintreeGateway(getBraintreeEnvironment(), getMerchantId(), getPublicKey(), getPrivateKey());
+            }
+
+            if (ObjectHelper.isNotEmpty(proxyHost) && ObjectHelper.isNotEmpty(proxyPort)) {
+                gateway.setProxy(proxyHost, proxyPort);
+            }
+
+            if (httpReadTimeout != null) {
+                gateway.getConfiguration().setTimeout(httpReadTimeout);
+            }
+
+            // If custom log name is defined, a new logger wil be requested otherwise
+            // the one supplied by Braintree' SDK will be used
+            final Logger logger = ObjectHelper.isNotEmpty(httpLogName)
+                    ? Logger.getLogger(httpLogName) : gateway.getConfiguration().getLogger();
+
+            // Cleanup handlers as by default braintree install a ConsoleHandler
+            for (Handler handler : logger.getHandlers()) {
+                logger.removeHandler(handler);
+            }
+
+            if (isLogHandlerEnabled()) {
+                logger.addHandler(new BraintreeLogHandler());
+            }
+
+            if (httpLogLevel != null) {
+                logger.setLevel(Level.parse(httpLogLevel));
+            }
+
+            gateway.getConfiguration().setLogger(logger);
+
+            return gateway;
+        } finally {
+            lock.unlock();
         }
-
-        if (ObjectHelper.isNotEmpty(proxyHost) && ObjectHelper.isNotEmpty(proxyPort)) {
-            gateway.setProxy(proxyHost, proxyPort);
-        }
-
-        if (httpReadTimeout != null) {
-            gateway.getConfiguration().setTimeout(httpReadTimeout);
-        }
-
-        // If custom log name is defined, a new logger wil be requested otherwise
-        // the one supplied by Braintree' SDK will be used
-        final Logger logger = ObjectHelper.isNotEmpty(httpLogName)
-                ? Logger.getLogger(httpLogName)
-                : gateway.getConfiguration().getLogger();
-
-        // Cleanup handlers as by default braintree install a ConsoleHandler
-        for (Handler handler : logger.getHandlers()) {
-            logger.removeHandler(handler);
-        }
-
-        if (isLogHandlerEnabled()) {
-            logger.addHandler(new BraintreeLogHandler());
-        }
-
-        if (httpLogLevel != null) {
-            logger.setLevel(Level.parse(httpLogLevel));
-        }
-
-        gateway.getConfiguration().setLogger(logger);
-
-        return gateway;
     }
 }
diff --git a/components/camel-braintree/src/main/java/org/apache/camel/component/braintree/internal/BraintreePropertiesHelper.java b/components/camel-braintree/src/main/java/org/apache/camel/component/braintree/internal/BraintreePropertiesHelper.java
index 25c1aa524f4..e5569e6e603 100644
--- a/components/camel-braintree/src/main/java/org/apache/camel/component/braintree/internal/BraintreePropertiesHelper.java
+++ b/components/camel-braintree/src/main/java/org/apache/camel/component/braintree/internal/BraintreePropertiesHelper.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.braintree.internal;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.braintree.BraintreeConfiguration;
 import org.apache.camel.support.component.ApiMethodPropertiesHelper;
@@ -25,16 +28,22 @@ import org.apache.camel.support.component.ApiMethodPropertiesHelper;
  */
 public final class BraintreePropertiesHelper extends ApiMethodPropertiesHelper<BraintreeConfiguration> {
 
+    private static final Lock LOCK = new ReentrantLock();
     private static BraintreePropertiesHelper helper;
 
     private BraintreePropertiesHelper(CamelContext context) {
         super(context, BraintreeConfiguration.class, BraintreeConstants.PROPERTY_PREFIX);
     }
 
-    public static synchronized BraintreePropertiesHelper getHelper(CamelContext context) {
-        if (helper == null) {
-            helper = new BraintreePropertiesHelper(context);
+    public static BraintreePropertiesHelper getHelper(CamelContext context) {
+        LOCK.lock();
+        try {
+            if (helper == null) {
+                helper = new BraintreePropertiesHelper(context);
+            }
+            return helper;
+        } finally {
+            LOCK.unlock();
         }
-        return helper;
     }
 }
diff --git a/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java b/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java
index d317d1f05c7..48971ebc930 100644
--- a/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java
+++ b/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPComponent.java
@@ -64,35 +64,40 @@ public class CoAPComponent extends DefaultComponent implements RestConsumerFacto
     public CoAPComponent() {
     }
 
-    public synchronized CoapServer getServer(int port, CoAPEndpoint endpoint) throws IOException, GeneralSecurityException {
-        CoapServer server = servers.get(port);
-        if (server == null && port == -1) {
-            server = getServer(DEFAULT_PORT, endpoint);
-        }
-        if (server == null) {
-            CoapEndpoint.Builder coapBuilder = new CoapEndpoint.Builder();
-            Configuration config = Configuration.createStandardWithoutFile();
-            InetSocketAddress address = new InetSocketAddress(port);
-            coapBuilder.setConfiguration(config);
-
-            // Configure TLS and / or TCP
-            if (CoAPEndpoint.enableDTLS(endpoint.getUri())) {
-                doEnableDTLS(endpoint, address, coapBuilder);
-            } else if (CoAPEndpoint.enableTCP(endpoint.getUri())) {
-                doEnableTCP(endpoint, config, address, coapBuilder);
-            } else {
-                coapBuilder.setInetSocketAddress(address);
+    public CoapServer getServer(int port, CoAPEndpoint endpoint) throws IOException, GeneralSecurityException {
+        lock.lock();
+        try {
+            CoapServer server = servers.get(port);
+            if (server == null && port == -1) {
+                server = getServer(DEFAULT_PORT, endpoint);
             }
-
-            server = new CoapServer();
-            server.addEndpoint(coapBuilder.build());
-
-            servers.put(port, server);
-            if (this.isStarted()) {
-                server.start();
+            if (server == null) {
+                CoapEndpoint.Builder coapBuilder = new CoapEndpoint.Builder();
+                Configuration config = Configuration.createStandardWithoutFile();
+                InetSocketAddress address = new InetSocketAddress(port);
+                coapBuilder.setConfiguration(config);
+
+                // Configure TLS and / or TCP
+                if (CoAPEndpoint.enableDTLS(endpoint.getUri())) {
+                    doEnableDTLS(endpoint, address, coapBuilder);
+                } else if (CoAPEndpoint.enableTCP(endpoint.getUri())) {
+                    doEnableTCP(endpoint, config, address, coapBuilder);
+                } else {
+                    coapBuilder.setInetSocketAddress(address);
+                }
+
+                server = new CoapServer();
+                server.addEndpoint(coapBuilder.build());
+
+                servers.put(port, server);
+                if (this.isStarted()) {
+                    server.start();
+                }
             }
+            return server;
+        } finally {
+            lock.unlock();
         }
-        return server;
     }
 
     private void doEnableTCP(
diff --git a/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPProducer.java b/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPProducer.java
index 9fc6b226541..1c51a23c3f6 100644
--- a/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPProducer.java
+++ b/components/camel-coap/src/main/java/org/apache/camel/coap/CoAPProducer.java
@@ -80,9 +80,14 @@ public class CoAPProducer extends DefaultProducer {
         }
     }
 
-    protected synchronized void initClient() throws Exception {
-        if (client == null) {
-            client = endpoint.createCoapClient(endpoint.getUri());
+    protected void initClient() throws Exception {
+        lock.lock();
+        try {
+            if (client == null) {
+                client = endpoint.createCoapClient(endpoint.getUri());
+            }
+        } finally {
+            lock.unlock();
         }
     }
 
diff --git a/components/camel-consul/src/main/java/org/apache/camel/component/consul/ConsulEndpoint.java b/components/camel-consul/src/main/java/org/apache/camel/component/consul/ConsulEndpoint.java
index a9065af8c9f..55c94a14b64 100644
--- a/components/camel-consul/src/main/java/org/apache/camel/component/consul/ConsulEndpoint.java
+++ b/components/camel-consul/src/main/java/org/apache/camel/component/consul/ConsulEndpoint.java
@@ -91,13 +91,18 @@ public class ConsulEndpoint extends DefaultEndpoint {
         return this.apiEndpoint;
     }
 
-    public synchronized Consul getConsul() throws Exception {
-        if (consul == null && ObjectHelper.isEmpty(getConfiguration().getConsulClient())) {
-            consul = configuration.createConsulClient(getCamelContext());
-        } else if (ObjectHelper.isNotEmpty(getConfiguration().getConsulClient())) {
-            consul = getConfiguration().getConsulClient();
+    public Consul getConsul() throws Exception {
+        lock.lock();
+        try {
+            if (consul == null && ObjectHelper.isEmpty(getConfiguration().getConsulClient())) {
+                consul = configuration.createConsulClient(getCamelContext());
+            } else if (ObjectHelper.isNotEmpty(getConfiguration().getConsulClient())) {
+                consul = getConfiguration().getConsulClient();
+            }
+
+            return consul;
+        } finally {
+            lock.unlock();
         }
-
-        return consul;
     }
 }
diff --git a/components/camel-controlbus/src/main/java/org/apache/camel/component/controlbus/ControlBusComponent.java b/components/camel-controlbus/src/main/java/org/apache/camel/component/controlbus/ControlBusComponent.java
index 23d50beb4f2..d9f840f41a9 100644
--- a/components/camel-controlbus/src/main/java/org/apache/camel/component/controlbus/ControlBusComponent.java
+++ b/components/camel-controlbus/src/main/java/org/apache/camel/component/controlbus/ControlBusComponent.java
@@ -48,11 +48,16 @@ public class ControlBusComponent extends DefaultComponent {
         return answer;
     }
 
-    synchronized ExecutorService getExecutorService() {
-        if (executorService == null) {
-            executorService = getCamelContext().getExecutorServiceManager().newDefaultThreadPool(this, "ControlBus");
+    ExecutorService getExecutorService() {
+        lock.lock();
+        try {
+            if (executorService == null) {
+                executorService = getCamelContext().getExecutorServiceManager().newDefaultThreadPool(this, "ControlBus");
+            }
+            return executorService;
+        } finally {
+            lock.unlock();
         }
-        return executorService;
     }
 
     @Override
diff --git a/components/camel-dhis2/camel-dhis2-component/src/main/java/org/apache/camel/component/dhis2/internal/Dhis2PropertiesHelper.java b/components/camel-dhis2/camel-dhis2-component/src/main/java/org/apache/camel/component/dhis2/internal/Dhis2PropertiesHelper.java
index 656d419c2aa..d9398111dc1 100644
--- a/components/camel-dhis2/camel-dhis2-component/src/main/java/org/apache/camel/component/dhis2/internal/Dhis2PropertiesHelper.java
+++ b/components/camel-dhis2/camel-dhis2-component/src/main/java/org/apache/camel/component/dhis2/internal/Dhis2PropertiesHelper.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.dhis2.internal;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.dhis2.Dhis2Configuration;
 import org.apache.camel.support.component.ApiMethodPropertiesHelper;
@@ -25,16 +28,22 @@ import org.apache.camel.support.component.ApiMethodPropertiesHelper;
  */
 public final class Dhis2PropertiesHelper extends ApiMethodPropertiesHelper<Dhis2Configuration> {
 
+    private static final Lock LOCK = new ReentrantLock();
     private static Dhis2PropertiesHelper helper;
 
     private Dhis2PropertiesHelper(CamelContext context) {
         super(context, Dhis2Configuration.class, Dhis2Constants.PROPERTY_PREFIX);
     }
 
-    public static synchronized Dhis2PropertiesHelper getHelper(CamelContext context) {
-        if (helper == null) {
-            helper = new Dhis2PropertiesHelper(context);
+    public static Dhis2PropertiesHelper getHelper(CamelContext context) {
+        LOCK.lock();
+        try {
+            if (helper == null) {
+                helper = new Dhis2PropertiesHelper(context);
+            }
+            return helper;
+        } finally {
+            LOCK.unlock();
         }
-        return helper;
     }
 }
diff --git a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/util/DropboxPropertyManager.java b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/util/DropboxPropertyManager.java
index af17c1fe073..e842d6170d9 100644
--- a/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/util/DropboxPropertyManager.java
+++ b/components/camel-dropbox/src/main/java/org/apache/camel/component/dropbox/util/DropboxPropertyManager.java
@@ -20,39 +20,45 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
 import java.util.Properties;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 public final class DropboxPropertyManager {
 
+    private static final Lock LOCK = new ReentrantLock();
     private static Properties properties;
     private static DropboxPropertyManager instance;
 
     private DropboxPropertyManager() {
     }
 
-    public static synchronized DropboxPropertyManager getInstance() throws Exception {
-        if (instance == null) {
-            instance = new DropboxPropertyManager();
-            properties = loadProperties();
+    public static DropboxPropertyManager getInstance() throws Exception {
+        LOCK.lock();
+        try {
+            if (instance == null) {
+                instance = new DropboxPropertyManager();
+                properties = loadProperties();
+            }
+            return instance;
+        } finally {
+            LOCK.unlock();
         }
-        return instance;
     }
 
     public String getProperty(String key) {
         return properties.getProperty(key);
     }
 
-    private static Properties loadProperties() throws Exception {
+    private static Properties loadProperties() throws DropboxException {
         URL url = DropboxPropertyManager.class.getResource("/dropbox.properties");
-
+        if (url == null) {
+            throw new DropboxException("dropbox.properties could not be found");
+        }
+        Properties properties = new Properties();
         try (InputStream inStream = url.openStream()) {
-            properties = new Properties();
-            try {
-                properties.load(inStream);
-            } catch (IOException e) {
-                throw new DropboxException("dropbox.properties can't be read", e);
-            }
+            properties.load(inStream);
         } catch (IOException e) {
-            throw new DropboxException("dropbox.properties could not be found", e);
+            throw new DropboxException("dropbox.properties can't be read", e);
         }
 
         return properties;
diff --git a/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/internal/FhirPropertiesHelper.java b/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/internal/FhirPropertiesHelper.java
index 63e12f164a4..c21f78cbf6f 100644
--- a/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/internal/FhirPropertiesHelper.java
+++ b/components/camel-fhir/camel-fhir-component/src/main/java/org/apache/camel/component/fhir/internal/FhirPropertiesHelper.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.fhir.internal;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.fhir.FhirConfiguration;
 import org.apache.camel.support.component.ApiMethodPropertiesHelper;
@@ -25,16 +28,22 @@ import org.apache.camel.support.component.ApiMethodPropertiesHelper;
  */
 public final class FhirPropertiesHelper extends ApiMethodPropertiesHelper<FhirConfiguration> {
 
+    private static final Lock LOCK = new ReentrantLock();
     private static FhirPropertiesHelper helper;
 
     private FhirPropertiesHelper(CamelContext context) {
         super(context, FhirConfiguration.class, FhirConstants.PROPERTY_PREFIX);
     }
 
-    public static synchronized FhirPropertiesHelper getHelper(CamelContext context) {
-        if (helper == null) {
-            helper = new FhirPropertiesHelper(context);
+    public static FhirPropertiesHelper getHelper(CamelContext context) {
+        LOCK.lock();
+        try {
+            if (helper == null) {
+                helper = new FhirPropertiesHelper(context);
+            }
+            return helper;
+        } finally {
+            LOCK.unlock();
         }
-        return helper;
     }
 }
diff --git a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConnectionFactory.java b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConnectionFactory.java
index 2e7c2a596e7..c519ee1eeaa 100644
--- a/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConnectionFactory.java
+++ b/components/camel-google/camel-google-bigquery/src/main/java/org/apache/camel/component/google/bigquery/GoogleBigQueryConnectionFactory.java
@@ -19,6 +19,8 @@ package org.apache.camel.component.google.bigquery;
 import java.io.InputStream;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 import com.google.api.client.util.Strings;
 import com.google.api.services.bigquery.BigqueryScopes;
@@ -41,6 +43,7 @@ public class GoogleBigQueryConnectionFactory {
     private String serviceURL;
     private BigQuery client;
     private CamelContext camelContext;
+    private final Lock lock = new ReentrantLock();
 
     public GoogleBigQueryConnectionFactory() {
     }
@@ -49,11 +52,16 @@ public class GoogleBigQueryConnectionFactory {
         this.client = client;
     }
 
-    public synchronized BigQuery getDefaultClient() throws Exception {
-        if (this.client == null) {
-            this.client = buildClient();
+    public BigQuery getDefaultClient() throws Exception {
+        lock.lock();
+        try {
+            if (this.client == null) {
+                this.client = buildClient();
+            }
+            return this.client;
+        } finally {
+            lock.unlock();
         }
-        return this.client;
     }
 
     private BigQuery buildClient() throws Exception {
@@ -133,8 +141,13 @@ public class GoogleBigQueryConnectionFactory {
         return this;
     }
 
-    private synchronized void resetClient() {
-        this.client = null;
+    private void resetClient() {
+        lock.lock();
+        try {
+            this.client = null;
+        } finally {
+            lock.unlock();
+        }
     }
 
     public GoogleBigQueryConnectionFactory setCamelContext(CamelContext camelContext) {
diff --git a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/internal/GoogleCalendarPropertiesHelper.java b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/internal/GoogleCalendarPropertiesHelper.java
index c6976865761..879adfa8780 100644
--- a/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/internal/GoogleCalendarPropertiesHelper.java
+++ b/components/camel-google/camel-google-calendar/src/main/java/org/apache/camel/component/google/calendar/internal/GoogleCalendarPropertiesHelper.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.google.calendar.internal;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.google.calendar.GoogleCalendarConfiguration;
 import org.apache.camel.support.component.ApiMethodPropertiesHelper;
@@ -25,16 +28,22 @@ import org.apache.camel.support.component.ApiMethodPropertiesHelper;
  */
 public final class GoogleCalendarPropertiesHelper extends ApiMethodPropertiesHelper<GoogleCalendarConfiguration> {
 
+    private static final Lock LOCK = new ReentrantLock();
     private static GoogleCalendarPropertiesHelper helper;
 
     private GoogleCalendarPropertiesHelper(CamelContext context) {
         super(context, GoogleCalendarConfiguration.class, GoogleCalendarConstants.PROPERTY_PREFIX);
     }
 
-    public static synchronized GoogleCalendarPropertiesHelper getHelper(CamelContext context) {
-        if (helper == null) {
-            helper = new GoogleCalendarPropertiesHelper(context);
+    public static GoogleCalendarPropertiesHelper getHelper(CamelContext context) {
+        LOCK.lock();
+        try {
+            if (helper == null) {
+                helper = new GoogleCalendarPropertiesHelper(context);
+            }
+            return helper;
+        } finally {
+            LOCK.unlock();
         }
-        return helper;
     }
 }
diff --git a/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/internal/GoogleDrivePropertiesHelper.java b/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/internal/GoogleDrivePropertiesHelper.java
index f714287c979..d1c87d39d27 100644
--- a/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/internal/GoogleDrivePropertiesHelper.java
+++ b/components/camel-google/camel-google-drive/src/main/java/org/apache/camel/component/google/drive/internal/GoogleDrivePropertiesHelper.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.google.drive.internal;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.google.drive.GoogleDriveConfiguration;
 import org.apache.camel.support.component.ApiMethodPropertiesHelper;
@@ -25,16 +28,22 @@ import org.apache.camel.support.component.ApiMethodPropertiesHelper;
  */
 public final class GoogleDrivePropertiesHelper extends ApiMethodPropertiesHelper<GoogleDriveConfiguration> {
 
+    private static final Lock LOCK = new ReentrantLock();
     private static GoogleDrivePropertiesHelper helper;
 
     private GoogleDrivePropertiesHelper(CamelContext context) {
         super(context, GoogleDriveConfiguration.class, GoogleDriveConstants.PROPERTY_PREFIX);
     }
 
-    public static synchronized GoogleDrivePropertiesHelper getHelper(CamelContext context) {
-        if (helper == null) {
-            helper = new GoogleDrivePropertiesHelper(context);
+    public static GoogleDrivePropertiesHelper getHelper(CamelContext context) {
+        LOCK.lock();
+        try {
+            if (helper == null) {
+                helper = new GoogleDrivePropertiesHelper(context);
+            }
+            return helper;
+        } finally {
+            LOCK.unlock();
         }
-        return helper;
     }
 }
diff --git a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailPropertiesHelper.java b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailPropertiesHelper.java
index c7376bd5eac..2ef381b5146 100644
--- a/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailPropertiesHelper.java
+++ b/components/camel-google/camel-google-mail/src/main/java/org/apache/camel/component/google/mail/internal/GoogleMailPropertiesHelper.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.google.mail.internal;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.google.mail.GoogleMailConfiguration;
 import org.apache.camel.support.component.ApiMethodPropertiesHelper;
@@ -25,16 +28,22 @@ import org.apache.camel.support.component.ApiMethodPropertiesHelper;
  */
 public final class GoogleMailPropertiesHelper extends ApiMethodPropertiesHelper<GoogleMailConfiguration> {
 
+    private static final Lock LOCK = new ReentrantLock();
     private static GoogleMailPropertiesHelper helper;
 
     private GoogleMailPropertiesHelper(CamelContext context) {
         super(context, GoogleMailConfiguration.class, GoogleMailConstants.PROPERTY_PREFIX);
     }
 
-    public static synchronized GoogleMailPropertiesHelper getHelper(CamelContext context) {
-        if (helper == null) {
-            helper = new GoogleMailPropertiesHelper(context);
+    public static GoogleMailPropertiesHelper getHelper(CamelContext context) {
+        LOCK.lock();
+        try {
+            if (helper == null) {
+                helper = new GoogleMailPropertiesHelper(context);
+            }
+            return helper;
+        } finally {
+            LOCK.unlock();
         }
-        return helper;
     }
 }
diff --git a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java
index dd8736ed74c..3abfa80f25e 100644
--- a/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java
+++ b/components/camel-google/camel-google-sheets/src/main/java/org/apache/camel/component/google/sheets/internal/GoogleSheetsPropertiesHelper.java
@@ -16,6 +16,9 @@
  */
 package org.apache.camel.component.google.sheets.internal;
 
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.component.google.sheets.GoogleSheetsConfiguration;
 import org.apache.camel.support.component.ApiMethodPropertiesHelper;
@@ -25,16 +28,22 @@ import org.apache.camel.support.component.ApiMethodPropertiesHelper;
  */
 public final class GoogleSheetsPropertiesHelper extends ApiMethodPropertiesHelper<GoogleSheetsConfiguration> {
 
+    private static final Lock LOCK = new ReentrantLock();
     private static GoogleSheetsPropertiesHelper helper;
 
     private GoogleSheetsPropertiesHelper(CamelContext context) {
         super(context, GoogleSheetsConfiguration.class, GoogleSheetsConstants.PROPERTY_PREFIX);
     }
 
-    public static synchronized GoogleSheetsPropertiesHelper getHelper(CamelContext context) {
-        if (helper == null) {
-            helper = new GoogleSheetsPropertiesHelper(context);
+    public static GoogleSheetsPropertiesHelper getHelper(CamelContext context) {
+        LOCK.lock();
+        try {
+            if (helper == null) {
+                helper = new GoogleSheetsPropertiesHelper(context);
+            }
+            return helper;
+        } finally {
+            LOCK.unlock();
         }
-        return helper;
     }
 }
diff --git a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/policy/HazelcastRoutePolicy.java b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/policy/HazelcastRoutePolicy.java
index 1a7eaa89502..0956bcb8aba 100644
--- a/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/policy/HazelcastRoutePolicy.java
+++ b/components/camel-hazelcast/src/main/java/org/apache/camel/component/hazelcast/policy/HazelcastRoutePolicy.java
@@ -104,13 +104,23 @@ public class HazelcastRoutePolicy extends RoutePolicySupport implements CamelCon
     }
 
     @Override
-    public synchronized void onStop(Route route) {
-        suspendedRoutes.remove(route);
+    public void onStop(Route route) {
+        lock.lock();
+        try {
+            suspendedRoutes.remove(route);
+        } finally {
+            lock.unlock();
+        }
     }
 
     @Override
-    public synchronized void onSuspend(Route route) {
-        suspendedRoutes.remove(route);
+    public void onSuspend(Route route) {
+        lock.lock();
+        try {
+            suspendedRoutes.remove(route);
+        } finally {
+            lock.unlock();
+        }
     }
 
     @Override
@@ -165,7 +175,8 @@ public class HazelcastRoutePolicy extends RoutePolicySupport implements CamelCon
         }
     }
 
-    private synchronized void stopConsumer(Route route) {
+    private void stopConsumer(Route route) {
+        lock.lock();
         try {
             if (!suspendedRoutes.contains(route)) {
                 LOGGER.debug("Stopping consumer for {} ({})", route.getId(), route.getConsumer());
@@ -174,10 +185,13 @@ public class HazelcastRoutePolicy extends RoutePolicySupport implements CamelCon
             }
         } catch (Exception e) {
             handleException(e);
+        } finally {
+            lock.unlock();
         }
     }
 
-    private synchronized void startAllStoppedConsumers() {
+    private void startAllStoppedConsumers() {
+        lock.lock();
         try {
             for (Route route : suspendedRoutes) {
                 LOGGER.debug("Starting consumer for {} ({})", route.getId(), route.getConsumer());
@@ -187,6 +201,8 @@ public class HazelcastRoutePolicy extends RoutePolicySupport implements CamelCon
             suspendedRoutes.clear();
         } catch (Exception e) {
             handleException(e);
+        } finally {
+            lock.unlock();
         }
     }
 
diff --git a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpRegistry.java b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpRegistry.java
index 5bb36576a7b..5b30fe77769 100644
--- a/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpRegistry.java
+++ b/components/camel-http-common/src/main/java/org/apache/camel/http/common/DefaultHttpRegistry.java
@@ -16,11 +16,13 @@
  */
 package org.apache.camel.http.common;
 
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 import jakarta.servlet.Servlet;
 
@@ -30,9 +32,9 @@ import org.slf4j.LoggerFactory;
 public class DefaultHttpRegistry implements HttpRegistry {
     private static final Logger LOG = LoggerFactory.getLogger(DefaultHttpRegistry.class);
 
-    private static final Map<String, HttpRegistry> registries = new HashMap<>();
+    private static final Map<String, HttpRegistry> registries = new ConcurrentHashMap<>();
 
-    private final Object lock = new Object();
+    private final Lock lock = new ReentrantLock();
 
     private final Set<HttpConsumer> consumers;
     private final Set<HttpRegistryProvider> providers;
@@ -45,20 +47,21 @@ public class DefaultHttpRegistry implements HttpRegistry {
     /**
      * Lookup or create a new registry if none exists with the given name
      */
-    public static synchronized HttpRegistry getHttpRegistry(String name) {
+    public static HttpRegistry getHttpRegistry(String name) {
         return registries.computeIfAbsent(name, k -> new DefaultHttpRegistry());
     }
 
     /**
      * Removes the http registry with the given name
      */
-    public static synchronized void removeHttpRegistry(String name) {
+    public static void removeHttpRegistry(String name) {
         registries.remove(name);
     }
 
     @Override
     public void register(HttpConsumer consumer) {
-        synchronized (lock) {
+        lock.lock();
+        try {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Registering consumer for path {} providers present: {}", consumer.getPath(), providers.size());
             }
@@ -66,12 +69,15 @@ public class DefaultHttpRegistry implements HttpRegistry {
             for (HttpRegistryProvider provider : providers) {
                 provider.connect(consumer);
             }
+        } finally {
+            lock.unlock();
         }
     }
 
     @Override
     public void unregister(HttpConsumer consumer) {
-        synchronized (lock) {
+        lock.lock();
+        try {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Unregistering consumer for path {}", consumer.getPath());
             }
@@ -79,6 +85,8 @@ public class DefaultHttpRegistry implements HttpRegistry {
             for (HttpRegistryProvider provider : providers) {
                 provider.disconnect(consumer);
             }
+        } finally {
+            lock.unlock();
         }
     }
 
@@ -90,7 +98,8 @@ public class DefaultHttpRegistry implements HttpRegistry {
 
     @Override
     public void register(HttpRegistryProvider provider) {
-        synchronized (lock) {
+        lock.lock();
+        try {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Registering CamelServlet with name {} consumers present: {}", provider.getServletName(),
                         consumers.size());
@@ -99,39 +108,50 @@ public class DefaultHttpRegistry implements HttpRegistry {
             for (HttpConsumer consumer : consumers) {
                 provider.connect(consumer);
             }
+        } finally {
+            lock.unlock();
         }
     }
 
     @Override
     public void unregister(HttpRegistryProvider provider) {
-        synchronized (lock) {
+        lock.lock();
+        try {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Unregistering CamelServlet with name {}", provider.getServletName());
             }
             providers.remove(provider);
+        } finally {
+            lock.unlock();
         }
     }
 
     @Override
     public HttpRegistryProvider getCamelServlet(String servletName) {
-        synchronized (lock) {
+        lock.lock();
+        try {
             for (HttpRegistryProvider provider : providers) {
                 if (provider.getServletName().equals(servletName)) {
                     return provider;
                 }
             }
             return null;
+        } finally {
+            lock.unlock();
         }
     }
 
     public void setServlets(List<Servlet> servlets) {
-        synchronized (lock) {
+        lock.lock();
+        try {
             providers.clear();
             for (Servlet servlet : servlets) {
                 if (servlet instanceof HttpRegistryProvider httpRegistryProvider) {
                     providers.add(httpRegistryProvider);
                 }
             }
+        } finally {
+            lock.unlock();
         }
     }
 
diff --git a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
index d6b762eb2ac..d973ef3ca12 100644
--- a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
+++ b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
@@ -207,18 +207,28 @@ public class HttpEndpoint extends HttpCommonEndpoint {
         return answer;
     }
 
-    public synchronized HttpClient getHttpClient() {
-        if (httpClient == null) {
-            httpClient = createHttpClient();
+    public HttpClient getHttpClient() {
+        lock.lock();
+        try {
+            if (httpClient == null) {
+                httpClient = createHttpClient();
+            }
+            return httpClient;
+        } finally {
+            lock.unlock();
         }
-        return httpClient;
     }
 
     /**
      * Sets a custom HttpClient to be used by the producer
      */
-    public synchronized void setHttpClient(HttpClient httpClient) {
-        this.httpClient = httpClient;
+    public void setHttpClient(HttpClient httpClient) {
+        lock.lock();
+        try {
+            this.httpClient = httpClient;
+        } finally {
+            lock.unlock();
+        }
     }
 
     /**
diff --git a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractConnectionMultiplexor.java b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractConnectionMultiplexor.java
index fdd9cc12554..5025f11518e 100644
--- a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractConnectionMultiplexor.java
+++ b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractConnectionMultiplexor.java
@@ -16,8 +16,10 @@
  */
 package org.apache.camel.component.iec60870;
 
+import java.util.HashSet;
 import java.util.Set;
-import java.util.concurrent.CopyOnWriteArraySet;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 import org.apache.camel.RuntimeCamelException;
 import org.slf4j.Logger;
@@ -38,48 +40,63 @@ public abstract class AbstractConnectionMultiplexor {
         }
     }
 
-    private final Set<HandleImplementation> handles = new CopyOnWriteArraySet<>();
+    private final Lock lock = new ReentrantLock();
+    private final Set<HandleImplementation> handles = new HashSet<>();
 
-    public synchronized Handle register() throws Exception {
-        final HandleImplementation handle = new HandleImplementation();
-
-        final boolean needStart = this.handles.isEmpty();
-        this.handles.add(handle);
-
-        if (needStart) {
-            LOG.info("Calling performStart()");
-            performStart();
-        }
+    public Handle register() throws Exception {
+        lock.lock();
+        try {
+            final HandleImplementation handle = new HandleImplementation();
 
-        return handle;
-    }
+            final boolean needStart = this.handles.isEmpty();
+            this.handles.add(handle);
 
-    private synchronized void unregister(final HandleImplementation handle) throws Exception {
-        if (!this.handles.remove(handle)) {
-            return;
-        }
+            if (needStart) {
+                LOG.info("Calling performStart()");
+                performStart();
+            }
 
-        if (this.handles.isEmpty()) {
-            LOG.info("Calling performStop()");
-            performStop();
+            return handle;
+        } finally {
+            lock.unlock();
         }
     }
 
-    public synchronized void dispose() {
-
-        LOG.info("Disposing");
-        if (this.handles.isEmpty()) {
-            LOG.debug("Disposing - not started");
-            return;
+    private void unregister(final HandleImplementation handle) throws Exception {
+        lock.lock();
+        try {
+            if (!this.handles.remove(handle)) {
+                return;
+            }
+
+            if (this.handles.isEmpty()) {
+                LOG.info("Calling performStop()");
+                performStop();
+            }
+        } finally {
+            lock.unlock();
         }
+    }
 
-        LOG.debug("Disposing - calling performStop()");
-
-        this.handles.clear();
+    public void dispose() {
+        lock.lock();
         try {
-            performStop();
-        } catch (final Exception e) {
-            throw new RuntimeCamelException("Failed to stop on dispose", e);
+            LOG.info("Disposing");
+            if (this.handles.isEmpty()) {
+                LOG.debug("Disposing - not started");
+                return;
+            }
+
+            LOG.debug("Disposing - calling performStop()");
+
+            this.handles.clear();
+            try {
+                performStop();
+            } catch (final Exception e) {
+                throw new RuntimeCamelException("Failed to stop on dispose", e);
+            }
+        } finally {
+            lock.unlock();
         }
     }
 
diff --git a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecComponent.java b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecComponent.java
index 387f1eca5bb..b78e1c32076 100644
--- a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecComponent.java
+++ b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/AbstractIecComponent.java
@@ -133,7 +133,8 @@ public abstract class AbstractIecComponent<T1, T2 extends BaseOptions<T2>> exten
 
         LOG.debug("parse connection - fullUri: {} -> {}", fullUri, id);
 
-        synchronized (this) {
+        lock.lock();
+        try {
             LOG.debug("Locating connection - {}", id);
 
             T1 connection = this.connections.get(id);
@@ -148,6 +149,8 @@ public abstract class AbstractIecComponent<T1, T2 extends BaseOptions<T2>> exten
                 this.connections.put(id, connection);
             }
             return connection;
+        } finally {
+            lock.unlock();
         }
     }
 
diff --git a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientConnection.java b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientConnection.java
index d1673f98ecc..09bb01c5d60 100644
--- a/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientConnection.java
+++ b/components/camel-iec60870/src/main/java/org/apache/camel/component/iec60870/client/ClientConnection.java
@@ -21,6 +21,8 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 import io.netty.channel.ChannelHandlerContext;
 import org.apache.camel.component.iec60870.DiscardAckModule;
@@ -76,6 +78,7 @@ public class ClientConnection {
         }
     };
 
+    private final Lock lock = new ReentrantLock();
     private final Map<ObjectAddress, Value<?>> lastValue = new HashMap<>();
     private final Map<ObjectAddress, ValueListener> listeners = new HashMap<>();
 
@@ -114,23 +117,33 @@ public class ClientConnection {
         this.client.close();
     }
 
-    protected synchronized void handleData(final ObjectAddress address, final Value<?> value) {
-        this.lastValue.put(address, value);
-        final ValueListener listener = this.listeners.get(address);
-        if (listener != null) {
-            listener.update(address, value);
+    protected void handleData(final ObjectAddress address, final Value<?> value) {
+        lock.lock();
+        try {
+            this.lastValue.put(address, value);
+            final ValueListener listener = this.listeners.get(address);
+            if (listener != null) {
+                listener.update(address, value);
+            }
+        } finally {
+            lock.unlock();
         }
     }
 
-    public synchronized void setListener(final ObjectAddress address, final ValueListener listener) {
-        if (listener != null) {
-            this.listeners.put(address, listener);
-            final Value<?> last = this.lastValue.get(address);
-            if (last != null) {
-                listener.update(address, last);
+    public void setListener(final ObjectAddress address, final ValueListener listener) {
+        lock.lock();
+        try {
+            if (listener != null) {
+                this.listeners.put(address, listener);
+                final Value<?> last = this.lastValue.get(address);
+                if (last != null) {
+                    listener.update(address, last);
+                }
+            } else {
+                this.listeners.remove(address);
             }
-        } else {
-            this.listeners.remove(address);
+        } finally {
+            lock.unlock();
         }
     }
 
diff --git a/components/camel-infinispan/camel-infinispan-embedded/src/main/java/org/apache/camel/component/infinispan/embedded/cluster/InfinispanEmbeddedClusterView.java b/components/camel-infinispan/camel-infinispan-embedded/src/main/java/org/apache/camel/component/infinispan/embedded/cluster/InfinispanEmbeddedClusterView.java
index 18d9c70f213..4d5d34c6a28 100644
--- a/components/camel-infinispan/camel-infinispan-embedded/src/main/java/org/apache/camel/component/infinispan/embedded/cluster/InfinispanEmbeddedClusterView.java
+++ b/components/camel-infinispan/camel-infinispan-embedded/src/main/java/org/apache/camel/component/infinispan/embedded/cluster/InfinispanEmbeddedClusterView.java
@@ -198,60 +198,55 @@ public class InfinispanEmbeddedClusterView extends InfinispanClusterView {
             ((LocalMember) getLocalMember()).setLeader(leader);
         }
 
-        private synchronized void run() {
-            if (!running.get()) {
-                return;
-            }
+        private void run() {
+            lock.lock();
+            try {
+                if (!running.get()) {
+                    return;
+                }
 
-            final String leaderKey = InfinispanClusterService.LEADER_KEY;
-            final String localId = getLocalMember().getId();
+                final String leaderKey = InfinispanClusterService.LEADER_KEY;
+                final String localId = getLocalMember().getId();
 
-            if (isLeader()) {
-                LOGGER.debug("Lock refresh key={}, id{}", leaderKey, localId);
+                if (isLeader()) {
+                    LOGGER.debug("Lock refresh key={}, id{}", leaderKey, localId);
 
-                // I'm still the leader, so refresh the key so it does not expire.
-                if (!cache.replace(
-                        InfinispanClusterService.LEADER_KEY,
-                        getClusterService().getId(),
-                        getClusterService().getId(),
-                        configuration.getLifespan(),
-                        configuration.getLifespanTimeUnit())) {
+                    // I'm still the leader, so refresh the key so it does not expire.
+                    if (!cache.replace(InfinispanClusterService.LEADER_KEY, getClusterService().getId(),
+                            getClusterService().getId(), configuration.getLifespan(), configuration.getLifespanTimeUnit())) {
 
-                    LOGGER.debug("Failed to refresh the lock key={}, id={}", leaderKey, localId);
+                        LOGGER.debug("Failed to refresh the lock key={}, id={}", leaderKey, localId);
 
-                    // Looks like I've lost the leadership.
-                    setLeader(false);
+                        // Looks like I've lost the leadership.
+                        setLeader(false);
+                    }
+                }
+                if (!isLeader()) {
+                    LOGGER.debug("Try to acquire lock key={}, id={}", leaderKey, localId);
+
+                    Object result = cache.putIfAbsent(InfinispanClusterService.LEADER_KEY, getClusterService().getId(),
+                            configuration.getLifespan(), configuration.getLifespanTimeUnit());
+                    if (result == null) {
+                        LOGGER.debug("Lock acquired key={}, id={}", leaderKey, localId);
+                        // Acquired the key so I'm the leader.
+                        setLeader(true);
+                    } else if (Objects.equals(getClusterService().getId(), result) && !isLeader()) {
+                        LOGGER.debug("Lock resumed key={}, id={}", leaderKey, localId);
+                        // Hey, I may have recovered from failure (or reboot was really
+                        // fast) and my key was still there so yeah, I'm the leader again!
+                        setLeader(true);
+                    } else {
+                        LOGGER.debug("Failed to acquire the lock key={}, id={}", leaderKey, localId);
+                        setLeader(false);
+                    }
                 }
-            }
-            if (!isLeader()) {
-                LOGGER.debug("Try to acquire lock key={}, id={}", leaderKey, localId);
 
-                Object result = cache.putIfAbsent(
-                        InfinispanClusterService.LEADER_KEY,
-                        getClusterService().getId(),
-                        configuration.getLifespan(),
+                // refresh local membership
+                cache.put(getLocalMember().getId(), isLeader() ? "true" : "false", configuration.getLifespan(),
                         configuration.getLifespanTimeUnit());
-                if (result == null) {
-                    LOGGER.debug("Lock acquired key={}, id={}", leaderKey, localId);
-                    // Acquired the key so I'm the leader.
-                    setLeader(true);
-                } else if (Objects.equals(getClusterService().getId(), result) && !isLeader()) {
-                    LOGGER.debug("Lock resumed key={}, id={}", leaderKey, localId);
-                    // Hey, I may have recovered from failure (or reboot was really
-                    // fast) and my key was still there so yeah, I'm the leader again!
-                    setLeader(true);
-                } else {
-                    LOGGER.debug("Failed to acquire the lock key={}, id={}", leaderKey, localId);
-                    setLeader(false);
-                }
+            } finally {
+                lock.unlock();
             }
-
-            // refresh local membership
-            cache.put(
-                    getLocalMember().getId(),
-                    isLeader() ? "true" : "false",
-                    configuration.getLifespan(),
-                    configuration.getLifespanTimeUnit());
         }
 
         @CacheEntryRemoved
diff --git a/components/camel-infinispan/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/remote/cluster/InfinispanRemoteClusterView.java b/components/camel-infinispan/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/remote/cluster/InfinispanRemoteClusterView.java
index 31eca6666c5..c05af72d184 100644
--- a/components/camel-infinispan/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/remote/cluster/InfinispanRemoteClusterView.java
+++ b/components/camel-infinispan/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/remote/cluster/InfinispanRemoteClusterView.java
@@ -210,75 +210,68 @@ public class InfinispanRemoteClusterView extends InfinispanClusterView {
             ((LocalMember) getLocalMember()).setLeader(leader);
         }
 
-        private synchronized void run() {
-            if (!running.get()) {
-                return;
-            }
+        private void run() {
+            lock.lock();
+            try {
+                if (!running.get()) {
+                    return;
+                }
 
-            final String leaderKey = InfinispanClusterService.LEADER_KEY;
-            final String localId = getLocalMember().getId();
+                final String leaderKey = InfinispanClusterService.LEADER_KEY;
+                final String localId = getLocalMember().getId();
 
-            if (isLeader() && version != null) {
-                LOGGER.debug("Lock refresh key={}, id{} with version={}", leaderKey, localId, version);
+                if (isLeader() && version != null) {
+                    LOGGER.debug("Lock refresh key={}, id{} with version={}", leaderKey, localId, version);
 
-                // I'm still the leader, so refresh the key so it does not expire.
-                if (!cache.replaceWithVersion(
-                        leaderKey,
-                        getClusterService().getId(),
-                        version,
-                        lifespan)) {
+                    // I'm still the leader, so refresh the key so it does not expire.
+                    if (!cache.replaceWithVersion(leaderKey, getClusterService().getId(), version, lifespan)) {
 
-                    LOGGER.debug("Failed to refresh the lock key={}, id={}, version={}", leaderKey, localId, version);
+                        LOGGER.debug("Failed to refresh the lock key={}, id={}, version={}", leaderKey, localId, version);
 
-                    setLeader(false);
-                } else {
-                    version = cache.getWithMetadata(leaderKey).getVersion();
+                        setLeader(false);
+                    } else {
+                        version = cache.getWithMetadata(leaderKey).getVersion();
 
-                    LOGGER.debug("Lock refreshed key={}, ud={}, with new version={}", leaderKey, localId, version);
+                        LOGGER.debug("Lock refreshed key={}, ud={}, with new version={}", leaderKey, localId, version);
+                    }
                 }
-            }
-
-            if (!isLeader()) {
-                LOGGER.debug("Try to acquire lock key={}, id={}", leaderKey, localId);
 
-                Object result = cache.withFlags(Flag.FORCE_RETURN_VALUE)
-                        .putIfAbsent(
-                                leaderKey,
-                                localId,
-                                configuration.getLifespan(),
-                                configuration.getLifespanTimeUnit());
+                if (!isLeader()) {
+                    LOGGER.debug("Try to acquire lock key={}, id={}", leaderKey, localId);
 
-                if (result == null) {
-                    // Acquired the key so I'm the leader.
-                    setLeader(true);
+                    Object result = cache.withFlags(Flag.FORCE_RETURN_VALUE)
+                            .putIfAbsent(leaderKey, localId, configuration.getLifespan(), configuration.getLifespanTimeUnit());
 
-                    // Get the version
-                    version = cache.getWithMetadata(leaderKey).getVersion();
+                    if (result == null) {
+                        // Acquired the key so I'm the leader.
+                        setLeader(true);
 
-                    LOGGER.debug("Lock acquired key={}, id={}, with version={}", leaderKey, localId, version);
+                        // Get the version
+                        version = cache.getWithMetadata(leaderKey).getVersion();
 
-                } else if (Objects.equals(getClusterService().getId(), result) && !isLeader()) {
-                    // Hey, I may have recovered from failure (or reboot was really
-                    // fast) and my key was still there so yeah, I'm the leader again!
-                    setLeader(true);
+                        LOGGER.debug("Lock acquired key={}, id={}, with version={}", leaderKey, localId, version);
+                    } else if (Objects.equals(getClusterService().getId(), result) && !isLeader()) {
+                        // Hey, I may have recovered from failure (or reboot was really
+                        // fast) and my key was still there so yeah, I'm the leader again!
+                        setLeader(true);
 
-                    // Get the version
-                    version = cache.getWithMetadata(leaderKey).getVersion();
+                        // Get the version
+                        version = cache.getWithMetadata(leaderKey).getVersion();
 
-                    LOGGER.debug("Lock resumed key={}, id={} with version={}", leaderKey, localId, version);
-                } else {
-                    LOGGER.debug("Failed to acquire the lock key={}, id={}", leaderKey, localId);
+                        LOGGER.debug("Lock resumed key={}, id={} with version={}", leaderKey, localId, version);
+                    } else {
+                        LOGGER.debug("Failed to acquire the lock key={}, id={}", leaderKey, localId);
 
-                    setLeader(false);
+                        setLeader(false);
+                    }
                 }
-            }
 
-            // refresh local membership
-            cache.put(
-                    getLocalMember().getId(),
-                    isLeader() ? "true" : "false",
-                    configuration.getLifespan(),
-                    configuration.getLifespanTimeUnit());
+                // refresh local membership
+                cache.put(getLocalMember().getId(), isLeader() ? "true" : "false", configuration.getLifespan(),
+                        configuration.getLifespanTimeUnit());
+            } finally {
+                lock.unlock();
+            }
         }
 
         @ClientCacheEntryRemoved
diff --git a/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java b/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java
index 3e07f097df8..ef61d2fdf28 100644
--- a/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java
+++ b/components/camel-irc/src/main/java/org/apache/camel/component/irc/IrcComponent.java
@@ -58,25 +58,35 @@ public class IrcComponent extends DefaultComponent implements SSLContextParamete
         return endpoint;
     }
 
-    public synchronized IRCConnection getIRCConnection(IrcConfiguration configuration) {
-        final IRCConnection connection;
-        if (connectionCache.containsKey(configuration.getCacheKey())) {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Returning Cached Connection to {}:{}", configuration.getHostname(), configuration.getNickname());
+    public IRCConnection getIRCConnection(IrcConfiguration configuration) {
+        lock.lock();
+        try {
+            final IRCConnection connection;
+            if (connectionCache.containsKey(configuration.getCacheKey())) {
+                if (LOG.isDebugEnabled()) {
+                    LOG.debug("Returning Cached Connection to {}:{}", configuration.getHostname(), configuration.getNickname());
+                }
+                connection = connectionCache.get(configuration.getCacheKey());
+            } else {
+                connection = createConnection(configuration);
+                connectionCache.put(configuration.getCacheKey(), connection);
             }
-            connection = connectionCache.get(configuration.getCacheKey());
-        } else {
-            connection = createConnection(configuration);
-            connectionCache.put(configuration.getCacheKey(), connection);
+            return connection;
+        } finally {
+            lock.unlock();
         }
-        return connection;
     }
 
-    public synchronized void closeIRCConnection(IrcConfiguration configuration) {
-        IRCConnection connection = connectionCache.get(configuration.getCacheKey());
-        if (connection != null) {
-            closeConnection(connection);
-            connectionCache.remove(configuration.getCacheKey());
+    public void closeIRCConnection(IrcConfiguration configuration) {
+        lock.lock();
+        try {
+            IRCConnection connection = connectionCache.get(configuration.getCacheKey());
+            if (connection != null) {
+                closeConnection(connection);
+                connectionCache.remove(configuration.getCacheKey());
+            }
+        } finally {
+            lock.unlock();
         }
     }
 
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/JmsServiceExtension.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/JmsServiceExtension.java
index f4b5f035002..e1bad67eb2a 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/JmsServiceExtension.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/utils/extensions/JmsServiceExtension.java
@@ -18,6 +18,8 @@ package org.apache.camel.itest.utils.extensions;
 
 import java.io.File;
 import java.util.concurrent.TimeUnit;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 import jakarta.jms.ConnectionFactory;
 import jakarta.jms.JMSException;
@@ -39,7 +41,7 @@ import static org.junit.jupiter.api.Assertions.fail;
 public final class JmsServiceExtension implements Extension {
 
     private static final Logger LOG = LoggerFactory.getLogger(JmsServiceExtension.class);
-
+    private static final Lock LOCK = new ReentrantLock();
     private static JmsServiceExtension instance;
 
     private final JmsComponent amq;
@@ -84,16 +86,21 @@ public final class JmsServiceExtension implements Extension {
         return amq;
     }
 
-    public static synchronized JmsServiceExtension createExtension() {
-        if (instance == null) {
-            try {
-                instance = new JmsServiceExtension();
-            } catch (JMSException e) {
-                LOG.error("Unable to create JMS connection: {}", e.getMessage(), e);
-                fail(String.format("Unable to create JMS connection: %s", e.getMessage()));
+    public static JmsServiceExtension createExtension() {
+        LOCK.lock();
+        try {
+            if (instance == null) {
+                try {
+                    instance = new JmsServiceExtension();
+                } catch (JMSException e) {
+                    LOG.error("Unable to create JMS connection: {}", e.getMessage(), e);
+                    fail(String.format("Unable to create JMS connection: %s", e.getMessage()));
+                }
             }
-        }
 
-        return instance;
+            return instance;
+        } finally {
+            LOCK.unlock();
+        }
     }
 }