It must be useful to consider using a ThreadPool here to prevent a large number of threads being created.