25
25
import org .slf4j .Logger ;
26
26
import org .slf4j .LoggerFactory ;
27
27
28
- public class LeaderElector {
28
+ public class LeaderElector implements AutoCloseable {
29
29
30
30
private static final Logger log = LoggerFactory .getLogger (LeaderElector .class );
31
31
@@ -43,12 +43,12 @@ public class LeaderElector {
43
43
private String reportedLeader ;
44
44
private Consumer <String > onNewLeaderHook ;
45
45
46
- private ScheduledExecutorService scheduledWorkers =
46
+ private final ScheduledExecutorService scheduledWorkers =
47
47
Executors .newSingleThreadScheduledExecutor (
48
48
makeThreadFactory ("leader-elector-scheduled-worker-%d" ));
49
- private ExecutorService leaseWorkers =
49
+ private final ExecutorService leaseWorkers =
50
50
Executors .newSingleThreadExecutor (makeThreadFactory ("leader-elector-lease-worker-%d" ));
51
- private ExecutorService hookWorkers =
51
+ private final ExecutorService hookWorkers =
52
52
Executors .newSingleThreadExecutor (makeThreadFactory ("leader-elector-hook-worker-%d" ));
53
53
54
54
public LeaderElector (LeaderElectionConfig config ) {
@@ -337,4 +337,11 @@ private void maybeReportTransition() {
337
337
private ThreadFactory makeThreadFactory (String nameFormat ) {
338
338
return new ThreadFactoryBuilder ().setDaemon (true ).setNameFormat (nameFormat ).build ();
339
339
}
340
+
341
+ @ Override
342
+ public void close () {
343
+ scheduledWorkers .shutdownNow ();
344
+ leaseWorkers .shutdownNow ();
345
+ hookWorkers .shutdownNow ();
346
+ }
340
347
}
0 commit comments