diff --git a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/PartitionedDispatcher.java b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/PartitionedDispatcher.java index 2b727ac61ad..1883f190fa1 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/PartitionedDispatcher.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/dispatcher/PartitionedDispatcher.java @@ -151,10 +151,16 @@ public boolean dispatch(Message message) { return partitionDispatcher.dispatch(message); } - private synchronized void populatedPartitions() { + private void populatedPartitions() { if (this.partitions.isEmpty()) { - for (int i = 0; i < this.partitionCount; i++) { - this.partitions.put(i, newPartition()); + synchronized (this.partitions) { + if (this.partitions.isEmpty()) { + Map partitionsToUse = new HashMap<>(); + for (int i = 0; i < this.partitionCount; i++) { + partitionsToUse.put(i, newPartition()); + } + this.partitions.putAll(partitionsToUse); + } } } }