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 }