View Javadoc
1   package org.kuali.common.jute.runtime;
2   
3   import static org.kuali.common.jute.base.Precondition.checkMin;
4   
5   import java.lang.management.ManagementFactory;
6   import java.lang.management.ThreadMXBean;
7   
8   import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
9   
10  @JsonDeserialize(builder = Threads.Builder.class)
11  public final class Threads {
12  
13      private final int current;
14      private final int daemon;
15      private final int peak;
16  
17      private Threads(Builder builder) {
18          this.current = builder.current;
19          this.daemon = builder.daemon;
20          this.peak = builder.peak;
21      }
22  
23      public static Threads build() {
24          ThreadMXBean bean = ManagementFactory.getThreadMXBean();
25          Builder builder = builder();
26          builder.withCurrent(bean.getThreadCount());
27          builder.withDaemon(bean.getDaemonThreadCount());
28          builder.withPeak(bean.getPeakThreadCount());
29          return builder.build();
30      }
31  
32      public static Builder builder() {
33          return new Builder();
34      }
35  
36      public static class Builder implements org.apache.commons.lang3.builder.Builder<Threads> {
37  
38          private int current;
39          private int daemon;
40          private int peak;
41  
42          public Builder withCurrent(int current) {
43              this.current = current;
44              return this;
45          }
46  
47          public Builder withDaemon(int daemon) {
48              this.daemon = daemon;
49              return this;
50          }
51  
52          public Builder withPeak(int peak) {
53              this.peak = peak;
54              return this;
55          }
56  
57          @Override
58          public Threads build() {
59              return validate(new Threads(this));
60          }
61  
62          private static Threads validate(Threads instance) {
63              checkMin(instance.current, 0, "current");
64              checkMin(instance.daemon, 0, "daemon");
65              checkMin(instance.peak, 0, "peak");
66              return instance;
67          }
68      }
69  
70      public int getCurrent() {
71          return current;
72      }
73  
74      public int getDaemon() {
75          return daemon;
76      }
77  
78      public int getPeak() {
79          return peak;
80      }
81  
82  }