public synchronized void init() {
        if (!initialized) {

            initializeRouteMatcher();

            if (!isRunningFromServlet()) {
                new Thread(() -> {
                  try {
                    EmbeddedServers.initialize();

                    if (embeddedServerIdentifier == null) {
                        embeddedServerIdentifier = EmbeddedServers.defaultIdentifier();
                    }

                    server = EmbeddedServers.create(embeddedServerIdentifier,
                                                    routes,
                                                    exceptionMapper,
                                                    staticFilesConfiguration,
                                                    hasMultipleHandlers());

                    server.configureWebSockets(webSocketHandlers, webSocketIdleTimeoutMillis);
                    server.trustForwardHeaders(trustForwardHeaders);

                    port = server.ignite(
                            ipAddress,
                            port,
                            sslStores,
                            maxThreads,
                            minThreads,
                            threadIdleTimeoutMillis);
                  } catch (Exception e) {
                    initExceptionHandler.accept(e);
                  }
                    try {
                        initLatch.countDown();
                        server.join();
                    } catch (InterruptedException e) {
                        LOG.error("server interrupted", e);
                        Thread.currentThread().interrupt();
                    }
                }).start();
            }
            initialized = true;
        }
    }
@return all routes information from this service
src/main/java/spark/Service.java