code: @Override
      public void start() {
          // Get IPs
          DnsResolve dns = new DnsResolve(mTarget);
          dns.start();
          List<String> ips = dns.getAddresses();
          if (dns.getError() != Cmd.SUCCEED || ips == null || ips.size() == 0)
              return;
          mIP = ips.get(0);
  
          // Cmd List
          routeContainers = new ArrayList<>();
          threads = new ArrayList<>(ONCE_COUNT);
  
          // Loop
          for (int i = 0; i < LOOP_COUNT; i++) {
              countDownLatch = new CountDownLatch(ONCE_COUNT);
              synchronized (mLock) {
                  for (int j = 1; j <= ONCE_COUNT; j++) {
                      // Get ttl
                      final int ttl = i * ONCE_COUNT + j;
                      // Thread run get tp ttl ping information
                      threads.add(new TraceRouteThread(mIP, ttl, this));
                  }
              }
              // Await 40 seconds long time
              try {
                  countDownLatch.await(40, TimeUnit.SECONDS);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
  
              // End
              if (countDownLatch.getCount() > 0) {
                  clear();
              }
  
              // Clear
              countDownLatch = null;
              synchronized (mLock) {
                  threads.clear();
              }
  
              // Break Loop
              if (isDone || isArrived || errorCount > 3)
                  break;
          }
  
          // Set Result
          if (routeContainers.size() > 0) {
              // Sort
              Collections.sort(routeContainers, new TraceRouteContainer.TraceRouteContainerComparator());
  
              // Set values
              ArrayList<String> routes = new ArrayList<>();
              int size = routeContainers.size();
              String prevIP = null;
  
              // For
              for (int s = 0; s < size; s++) {
                  TraceRouteContainer container = routeContainers.get(s);
                  if (prevIP != null && container.mIP.equals(prevIP)) {
                      break;
                  } else {
                      routes.add(container.toString());
                      prevIP = container.mIP;
                  }
              }
  
              routes.trimToSize();
              mRoutes = routes;
          }
  
          // Clear
          routeContainers = null;
          threads = null;
      }
docs: Override Start