void start() {
        lock();
        try {
            if (!isRunning()) {
                checkState(thread == null, "trying to start thread without cleanup");
                thread = new Thread(runnableSupplier.get(), name);
                thread.setDaemon(true);
                thread.start();
            }
        } finally {
            unlock();
        }
    }
Starts a thread with the supplied runnable if it isn't running yet.
core/src/main/java/com/linecorp/armeria/client/endpoint/RestartableThread.java