@Override
	protected void afterExecute(Runnable r, Throwable t) {
		Future<?> result = (Future<?>)r;
		
		
		try {
			System.out.printf("******************************\n");
			System.out.printf("MyExecutor: A task is finishing.\n");
			System.out.printf("MyExecutor: result - %s\n", result.get());
			// calculate running time
			Date startDate = startTimes.get(String.valueOf(r.hashCode()));
			Date finishDate = new Date();
			long diff = finishDate.getTime() - startDate.getTime();
			System.out.printf("MyExecutor: Duration - %d\n", diff);
			System.out.printf("******************************\n");
		} catch (InterruptedException | ExecutionException e) {
			e.printStackTrace();
		}
	}