2525import org .slf4j .Logger ;
2626import org .slf4j .LoggerFactory ;
2727
28- public class LeaderElector {
28+ public class LeaderElector implements AutoCloseable {
2929
3030 private static final Logger log = LoggerFactory .getLogger (LeaderElector .class );
3131
@@ -43,12 +43,12 @@ public class LeaderElector {
4343 private String reportedLeader ;
4444 private Consumer <String > onNewLeaderHook ;
4545
46- private ScheduledExecutorService scheduledWorkers =
46+ private final ScheduledExecutorService scheduledWorkers =
4747 Executors .newSingleThreadScheduledExecutor (
4848 makeThreadFactory ("leader-elector-scheduled-worker-%d" ));
49- private ExecutorService leaseWorkers =
49+ private final ExecutorService leaseWorkers =
5050 Executors .newSingleThreadExecutor (makeThreadFactory ("leader-elector-lease-worker-%d" ));
51- private ExecutorService hookWorkers =
51+ private final ExecutorService hookWorkers =
5252 Executors .newSingleThreadExecutor (makeThreadFactory ("leader-elector-hook-worker-%d" ));
5353
5454 public LeaderElector (LeaderElectionConfig config ) {
@@ -337,4 +337,11 @@ private void maybeReportTransition() {
337337 private ThreadFactory makeThreadFactory (String nameFormat ) {
338338 return new ThreadFactoryBuilder ().setDaemon (true ).setNameFormat (nameFormat ).build ();
339339 }
340+
341+ @ Override
342+ public void close () {
343+ scheduledWorkers .shutdownNow ();
344+ leaseWorkers .shutdownNow ();
345+ hookWorkers .shutdownNow ();
346+ }
340347}
0 commit comments