Repository: incubator-htrace Updated Branches: refs/heads/master 1191677f4 -> ab8dfe25e
HTRACE-170. Optimize use of Random in htrace-core by using ThreadLocalRandom (Vladimir Sitnikov via Colin P. McCabe) Project: http://git-wip-us.apache.org/repos/asf/incubator-htrace/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-htrace/commit/ab8dfe25 Tree: http://git-wip-us.apache.org/repos/asf/incubator-htrace/tree/ab8dfe25 Diff: http://git-wip-us.apache.org/repos/asf/incubator-htrace/diff/ab8dfe25 Branch: refs/heads/master Commit: ab8dfe25e382e7baf7b8add3be7c578e52fd840f Parents: 1191677 Author: Colin P. Mccabe <[email protected]> Authored: Wed May 13 19:02:34 2015 -0700 Committer: Colin P. Mccabe <[email protected]> Committed: Wed May 13 19:02:34 2015 -0700 ---------------------------------------------------------------------- htrace-core/src/main/java/org/apache/htrace/Tracer.java | 3 ++- .../src/main/java/org/apache/htrace/impl/CountSampler.java | 5 ++--- htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java | 3 ++- .../main/java/org/apache/htrace/impl/ProbabilitySampler.java | 4 ++-- htrace-core/src/test/java/org/apache/htrace/TraceCreator.java | 5 +++-- 5 files changed, 11 insertions(+), 9 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/ab8dfe25/htrace-core/src/main/java/org/apache/htrace/Tracer.java ---------------------------------------------------------------------- diff --git a/htrace-core/src/main/java/org/apache/htrace/Tracer.java b/htrace-core/src/main/java/org/apache/htrace/Tracer.java index b8c4c1a..9463f41 100644 --- a/htrace-core/src/main/java/org/apache/htrace/Tracer.java +++ b/htrace-core/src/main/java/org/apache/htrace/Tracer.java @@ -23,6 +23,7 @@ import org.apache.htrace.impl.MilliSpan; import java.util.List; import java.util.Random; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.ThreadLocalRandom; /** * A Tracer provides the implementation for collecting and distributing Spans @@ -30,10 +31,10 @@ import java.util.concurrent.CopyOnWriteArrayList; */ public class Tracer { public static final Log LOG = LogFactory.getLog(Tracer.class); - private final static Random random = new Random(); static long nonZeroRandom64() { long id; + Random random = ThreadLocalRandom.current(); do { id = random.nextLong(); } while (id == 0); http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/ab8dfe25/htrace-core/src/main/java/org/apache/htrace/impl/CountSampler.java ---------------------------------------------------------------------- diff --git a/htrace-core/src/main/java/org/apache/htrace/impl/CountSampler.java b/htrace-core/src/main/java/org/apache/htrace/impl/CountSampler.java index fe98916..be5063e 100644 --- a/htrace-core/src/main/java/org/apache/htrace/impl/CountSampler.java +++ b/htrace-core/src/main/java/org/apache/htrace/impl/CountSampler.java @@ -20,6 +20,7 @@ import org.apache.htrace.HTraceConfiguration; import org.apache.htrace.Sampler; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; /** * Sampler that returns true every N calls. Specify the frequency interval by configuring a @@ -28,10 +29,8 @@ import java.util.Random; public class CountSampler implements Sampler<Object> { public final static String SAMPLER_FREQUENCY_CONF_KEY = "sampler.frequency"; - final static Random random = new Random(); - final long frequency; - long count = random.nextLong(); + long count = ThreadLocalRandom.current().nextLong(); public CountSampler(HTraceConfiguration conf) { this.frequency = Long.parseLong(conf.get(SAMPLER_FREQUENCY_CONF_KEY), 10); http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/ab8dfe25/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java ---------------------------------------------------------------------- diff --git a/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java b/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java index c688858..8544867 100644 --- a/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java +++ b/htrace-core/src/main/java/org/apache/htrace/impl/MilliSpan.java @@ -41,6 +41,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; /** * A Span implementation that stores its information in milliseconds since the @@ -63,10 +64,10 @@ public class MilliSpan implements Span { private Map<String, String> traceInfo = null; private String processId; private List<TimelineAnnotation> timeline = null; - private final static Random random = new Random(); private static long nonZeroRandom64() { long id; + Random random = ThreadLocalRandom.current(); do { id = random.nextLong(); } while (id == 0); http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/ab8dfe25/htrace-core/src/main/java/org/apache/htrace/impl/ProbabilitySampler.java ---------------------------------------------------------------------- diff --git a/htrace-core/src/main/java/org/apache/htrace/impl/ProbabilitySampler.java b/htrace-core/src/main/java/org/apache/htrace/impl/ProbabilitySampler.java index 3c08c84..e6e4894 100644 --- a/htrace-core/src/main/java/org/apache/htrace/impl/ProbabilitySampler.java +++ b/htrace-core/src/main/java/org/apache/htrace/impl/ProbabilitySampler.java @@ -22,6 +22,7 @@ import org.apache.htrace.HTraceConfiguration; import org.apache.htrace.Sampler; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; /** * Sampler that returns true a certain percentage of the time. Specify the frequency interval by @@ -30,7 +31,6 @@ import java.util.Random; public class ProbabilitySampler implements Sampler<Object> { private static final Log LOG = LogFactory.getLog(ProbabilitySampler.class); public final double threshold; - private Random random = new Random(); public final static String SAMPLER_FRACTION_CONF_KEY = "sampler.fraction"; public ProbabilitySampler(HTraceConfiguration conf) { @@ -43,6 +43,6 @@ public class ProbabilitySampler implements Sampler<Object> { @Override public boolean next(Object info) { - return random.nextDouble() < threshold; + return ThreadLocalRandom.current().nextDouble() < threshold; } } http://git-wip-us.apache.org/repos/asf/incubator-htrace/blob/ab8dfe25/htrace-core/src/test/java/org/apache/htrace/TraceCreator.java ---------------------------------------------------------------------- diff --git a/htrace-core/src/test/java/org/apache/htrace/TraceCreator.java b/htrace-core/src/test/java/org/apache/htrace/TraceCreator.java index f79b01a..7ec6309 100644 --- a/htrace-core/src/test/java/org/apache/htrace/TraceCreator.java +++ b/htrace-core/src/test/java/org/apache/htrace/TraceCreator.java @@ -18,6 +18,7 @@ package org.apache.htrace; import java.util.Collection; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; import org.apache.htrace.Sampler; import org.apache.htrace.SpanReceiver; @@ -80,7 +81,7 @@ public class TraceCreator { public void createThreadedTrace() { TraceScope s = Trace.startSpan(THREADED_TRACE_ROOT, Sampler.ALWAYS); try { - Random r = new Random(); + Random r = ThreadLocalRandom.current(); int numThreads = r.nextInt(4) + 1; Thread[] threads = new Thread[numThreads]; @@ -130,7 +131,7 @@ public class TraceCreator { public void run() { try { Thread.sleep(750); - Random r = new Random(); + Random r = ThreadLocalRandom.current(); int importantNumber = 100 / r.nextInt(3); System.out.println("Important number: " + importantNumber); } catch (InterruptedException ie) {
