code: public void classify() {
          long start = System.currentTimeMillis();
          if(log.isInfoEnabled())
              log.info("Classifying with " + numThreads + " threads");
  
          // Create contexts for init concepts in the ontology
          int numConcepts = factory.getTotalConcepts();
          for (int i = 0; i < numConcepts; i++) {
              Context c = new Context(i, this);
              contextIndex.put(i, c);
              if (c.activate()) {
                  todo.add(c);
              }
              if(log.isTraceEnabled()) {
                  log.trace("Added context " + i);
              }
          }
          
          if(log.isInfoEnabled())
              log.info("Running saturation");
          ExecutorService executor = Executors.newFixedThreadPool(numThreads, THREAD_FACTORY);
          for (int j = 0; j < numThreads; j++) {
              Runnable worker = new Worker(todo);
              executor.execute(worker);
          }
  
          executor.shutdown();
          while (!executor.isTerminated()) {
              try {
                  executor.awaitTermination(100, TimeUnit.SECONDS);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
  
          assert (todo.isEmpty());
  
          if (log.isTraceEnabled()) {
              log.trace("Processed " + contextIndex.size() + " contexts");
          }
          
          hasBeenIncrementallyClassified = false;
          Statistics.INSTANCE.setTime("classification",
                  System.currentTimeMillis() - start);
      }
docs: Starts the concurrent classification process.