Преимущество, которое я вижу, заключается в управлении / планировании нескольких потоков. С помощью ExecutorService вам не нужно писать свой собственный менеджер потоков, который может быть запутан с ошибками. Это особенно полезно, если ваша программа должна запускать сразу несколько потоков. Например, вы хотите выполнить два потока за раз, вы можете легко сделать это следующим образом:
ExecutorService exec = Executors.newFixedThreadPool(2);
exec.execute(new Runnable() {
public void run() {
System.out.println("Hello world");
}
});
exec.shutdown();
Пример может быть тривиальным, но попытайтесь считать, что строка «hello world» состоит из и вы хотите, чтобы эта операция выполнялась в нескольких потоках за раз, чтобы улучшить производительность вашей программы. Это всего лишь один пример. Есть еще много случаев, когда вы планируете или запускаете несколько потоков и используете ExecutorService в качестве менеджера потоков.
Для запуска одного потока я не вижу явного преимущества используя ExecutorService.
replace (Inputs, 'AA', 'A') будет работать, если вам нужно беспокоиться только о парах A.