From 105ed9cb264eb3569b5ae0d65ac2fd8cb636f8e8 Mon Sep 17 00:00:00 2001 From: Ivan Topolnjak Date: Sun, 21 May 2017 14:05:05 +0200 Subject: wip, trying to get something that could be tested --- kamon-core/src/main/scala/kamon/package.scala | 30 +++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'kamon-core/src/main/scala/kamon/package.scala') diff --git a/kamon-core/src/main/scala/kamon/package.scala b/kamon-core/src/main/scala/kamon/package.scala index 92c48017..b65022bc 100644 --- a/kamon-core/src/main/scala/kamon/package.scala +++ b/kamon-core/src/main/scala/kamon/package.scala @@ -1,3 +1,6 @@ +import java.util.concurrent.atomic.AtomicLong +import java.util.concurrent.{Executors, ThreadFactory} + import com.typesafe.config.Config import scala.collection.concurrent.TrieMap @@ -6,6 +9,33 @@ package object kamon { + /** + * Creates a thread factory that assigns the specified name to all created Threads. + */ + def threadFactory(name: String): ThreadFactory = + new ThreadFactory { + val defaultFactory = Executors.defaultThreadFactory() + + override def newThread(r: Runnable): Thread = { + val thread = defaultFactory.newThread(r) + thread.setName(name) + thread + } + } + + def numberedThreadFactory(name: String): ThreadFactory = + new ThreadFactory { + val count = new AtomicLong() + val defaultFactory = Executors.defaultThreadFactory() + + override def newThread(r: Runnable): Thread = { + val thread = defaultFactory.newThread(r) + thread.setName(name + "-" + count.incrementAndGet().toString) + thread + } + } + + /** * Workaround to the non thread-safe [[scala.collection.concurrent.TrieMap#getOrElseUpdate()]] method. More details on * why this is necessary can be found at [[https://issues.scala-lang.org/browse/SI-7943]]. -- cgit v1.2.3