creating a thread executor
creating a fixed-size thread executor
executing tasks in an executor that returns a result
running multiple tasks and processing the first result
running multiple tasks and processing all the results