6. Reuse threads with ExecutorService
Use ExecutorService to submit work without creating a new thread for every task. You will run tasks with execute and submit, compare common Executors factory methods, and spot unsafe defaults such as unbounded growth.