Реализация интерфейса Callable в классе задач. И передать задачу в executorService.Submit (Task); который вернет экземпляр Future. Вызвать future.get (), который будет ожидать завершения выполнения блока Call
Добавьте полнотекстовые индексы ко всем строковым столбцам во всех тех таблицах, затем объединение результаты
select * from table1 where match(col1, col2, col3) against ('some string')
union all
select * from table2 where match(col1, col2) against ('some string')
union all
select * from table3 where match(col1, col2, col3, col4) against ('some string')
...