The issue is whether the tasks that you are doing with your code can be run concurrently or not. If your code has been written as sequential, then you first need to identify what tasks can be run concurrently, what are the interdependencies between those tasks, whether they need to cooperate or whether they are independent. If they need to cooperate, you will need to have shared objects, locking etc. You need to decide whether you should use thread pools or create your own threads every time for every new task. Most of these would be very specific to your situation, so there can't be a generic answer. Once you have figured all that out check the java concurrency documentation on how to implement.