diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DeltaSynchronousMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DeltaSynchronousMetricStorage.java index 18007dc28a3..2b3e3d9ff43 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DeltaSynchronousMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DeltaSynchronousMetricStorage.java @@ -291,9 +291,11 @@ boolean isLockedForCollect() { } /** Locks new-series creation and waits for any in-flight new-series operations to complete. */ + @SuppressWarnings("ThreadPriorityCheck") void lockForCollectAndAwait() { int s = newSeriesGate.addAndGet(1); while (s != 1) { + Thread.yield(); s = newSeriesGate.get(); } } @@ -350,8 +352,11 @@ void lockForCollect() { } /** Waits for all in-flight recorders to finish, then clears the collection lock. */ + @SuppressWarnings("ThreadPriorityCheck") void awaitRecordersAndUnlock() { - while (state.get() > 1) {} + while (state.get() > 1) { + Thread.yield(); + } state.addAndGet(-1); } }