SchedulerProvider.java
// SPDX-License-Identifier: LGPL-2.1-or-later
// Copyright (c) 2012-2014 Monty Program Ab
// Copyright (c) 2015-2025 MariaDB Corporation Ab
package org.mariadb.jdbc.client.util;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledThreadPoolExecutor;
public final class SchedulerProvider {
private static ScheduledThreadPoolExecutor timeoutScheduler;
@SuppressWarnings("try")
public static ScheduledThreadPoolExecutor getTimeoutScheduler(ClosableLock lock) {
if (timeoutScheduler == null) {
try (ClosableLock ignore = lock.closeableLock()) {
if (timeoutScheduler == null) {
timeoutScheduler =
new ScheduledThreadPoolExecutor(
1,
runnable -> {
Thread result = Executors.defaultThreadFactory().newThread(runnable);
result.setName("MariaDb-timeout");
result.setDaemon(true);
return result;
});
timeoutScheduler.setRemoveOnCancelPolicy(true);
}
}
}
return timeoutScheduler;
}
}