What are your preferred strategies for handling concurrency and multi-threading in your applications?