look at Executors for thread creation