code: @Override
      public Thread newThread(final Runnable runnable) {
          int threadId = createdThreadCount.incrementAndGet();
          final String name = executorName + "-thread-" + threadId;
          // The AccessControlContext is implicitly copied from the creating
          // thread, so use doPrivileged to prevent that.
          return AccessController.doPrivileged(new PrivilegedAction<Thread>() {
              @Override
              public Thread run() {
                  final Thread thread;
                  if (TRACE_ENABLED_AT_STARTUP) {
                      // We don't want a mixed pool of LibertyThreads and regular Threads, which
                      // could occur if a user were to change the trace settings after startup.
                      // Also, using the LibertyThread will have a (very) slight impact on 
                      // performance as it will require a check to the trace component and an
                      // additional method call.  As such, we will only use LibertyThreads if
                      // the trace was enabled at server startup - the user can subsequently
                      // disable the trace while the server is still up, which will stop the
                      // LibertyThreads from printing stack traces, but may still be slightly
                      // slower than using normal Threads.
                      thread = new LibertyThread(threadGroup, runnable, name);
                  } else {
                      thread = new Thread(threadGroup, runnable, name);
                  }
                  // The daemon, priority, and context class loader are implicitly
                  // copied from the creating thread, so reset them all.
                  thread.setDaemon(true);
                  thread.setPriority(Thread.NORM_PRIORITY);
                  thread.setContextClassLoader(contextClassLoader);
                  return thread;
              }
          });
      }
docs: Create a new thread.
  
  @param runnable the task to run