public void train() {
   int n = txt_rdr.getSize();
   assert (n == ans.size() && n != 0);
   ExecutorService fre_executor = Executors.newFixedThreadPool(NTHREADS);
   ExecutorService dict_executor = Executors.newFixedThreadPool(NTHREADS);
   for (int i = 0; i < n; i++) {
     Runnable task = new FreRunnable(i);
     fre_executor.execute(task);
   }
   fre_executor.shutdown();
   while (!fre_executor.isTerminated()) {}
   for (String s : f_rec.getRecordedStrings()) {
     Runnable task = new DictRunnable(s);
     dict_executor.execute(task);
   }
   dict_executor.shutdown();
   while (!dict_executor.isTerminated()) {}
 }