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
33
34 @InterfaceAudience.Private
35 public class MetricsExecutorImpl implements MetricsExecutor {
36
37 @Override
38 public ScheduledExecutorService getExecutor() {
39 return ExecutorSingleton.INSTANCE.scheduler;
40 }
41
42 @Override
43 public void stop() {
44 if (!getExecutor().isShutdown()) {
45 getExecutor().shutdown();
46 }
47 }
48
49 private enum ExecutorSingleton {
50 INSTANCE;
51 private final ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1,
52 new ThreadPoolExecutorThreadFactory("HBase-Metrics2-"));
53 }
54
55 private final static class ThreadPoolExecutorThreadFactory implements ThreadFactory {
56 private final String name;
57 private final AtomicInteger threadNumber = new AtomicInteger(1);
58
59 private ThreadPoolExecutorThreadFactory(String name) {
60 this.name = name;
61 }
62
63 @Override
64 public Thread newThread(Runnable runnable) {
65 Thread t = new Thread(runnable, name + threadNumber.getAndIncrement());
66 t.setDaemon(true);
67 return t;
68 }
69 }
70 }