code: public static ExecutorService create(final BiFunction<Runnable, String, Thread> threadSupplier, final String alias) {
          if (threadSupplier == null) {
              throw new IllegalArgumentException("Condition evaluation thread supplier cannot be null");
          }
          return Executors.newSingleThreadExecutor(new ThreadFactory() {
              public Thread newThread(Runnable r) {
                  final String threadName = generateDefaultThreadName(alias);
                  return threadSupplier.apply(r, threadName);
              }
          });
      }
docs: Creates an executor services that creates thread's based on the <code>thread supplier</code>.
  The first argument to the <code>threadSupplier</code> is the Runnable (the condition that will be evaluated).
  The second argument is the default thread name generated by Awaitility.
  @param threadSupplier The thread supplier
  @return An executor service that will use the thread created by the <code>threadSupplier</code> when polling