import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecutorExample {
    
    private static ExecutorService executor = Executors.newFixedThreadPool(8); //sets maximum number of concurrent threads
    
    public static void main (String args[]) {
        
        for (int i = 0; i < 10; i++){
            BasicThread bThread1 = new BasicThread("First thread " + i);
               BasicThread bThread2 = new BasicThread("Second thread " + i);
             executor.execute(bThread1);
               executor.execute(bThread2);
        }
        
        executor.shutdown();
        
        boolean terminated = executor.isTerminated();
        while (!terminated){
            try {
                Thread.sleep(10); //To allow any threads that haven“t ended yet to finish
            }
            catch (InterruptedException ex){
                System.err.println("Caught Interrupted Exception: " + ex.getMessage());
            }
            terminated = executor.isTerminated();
        }
    
    }
}