1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.hadoop.metrics2.lib;
20
21 import java.util.concurrent.ScheduledExecutorService;
22 import java.util.concurrent.ScheduledThreadPoolExecutor;
23 import java.util.concurrent.ThreadFactory;
24 import java.util.concurrent.atomic.AtomicInteger;
25
26 import org.apache.hadoop.hbase.classification.InterfaceAudience;
27 import org.apache.hadoop.metrics2.MetricsExecutor;
28
29
30
31
32 @InterfaceAudience.Private
33 public class MetricsExecutorImpl implements MetricsExecutor {
34
35 @Override
36 public ScheduledExecutorService getExecutor() {
37 return ExecutorSingleton.INSTANCE.scheduler;
38 }
39
40 @Override
41 public void stop() {
42 if (!getExecutor().isShutdown()) {
43 getExecutor().shutdown();
44 }
45 }
46
47 private enum ExecutorSingleton {
48 INSTANCE;
49
50 private final ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1, new ThreadPoolExecutorThreadFactory("HBase-Metrics2-"));
51 }
52
53 private static class ThreadPoolExecutorThreadFactory implements ThreadFactory {
54 private final String name;
55 private final AtomicInteger threadNumber = new AtomicInteger(1);
56
57 private ThreadPoolExecutorThreadFactory(String name) {
58 this.name = name;
59 }
60
61 @Override
62 public Thread newThread(Runnable runnable) {
63 Thread t = new Thread(runnable, name + threadNumber.getAndIncrement());
64 t.setDaemon(true);
65 return t;
66 }
67 }
68 }