Avatar ·

متى وكيف تستخدم ThreadLocal في Java للعمل الآمن مع الخيوط؟

مرحباً بالجميع! أنا مطور Java بخبرة حوالي عام، وأعمل حالياً على فهم تعدد الخيوط. واجهت مشكلة: لدي خادم ويب على Spring Boot يعالج الطلبات في خيوط مختلفة. لكل طلب، أقوم بإنشاء كائن `SimpleDateFormat` لتنسيق التواريخ. أعلم أن `SimpleDateFormat` غير آمن للخيوط، لذا أقوم بإنشاء مثيل جديد داخل كل دالة. لكن هذا يبدو غير فعال - إنشاء كائن في كل مرة ثم نسيانه. سمعت عن `ThreadLocal`، لكنني لا أفهم متى يجب استخدامه. على سبيل المثال، لدي هذا الكود: ```java public class DateService { public String formatDate(Date date) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); return sdf.format(date); } } ``` أستدعي هذه الدالة من خيوط مختلفة، وأحياناً أحصل على نتائج غريبة أو استثناءات. قرأت أنه يمكن جعل `SimpleDateFormat` ثابتاً (static) وتغليفه في `ThreadLocal`، لكن لماذا نحتاج هذا؟ أليس من الأسهل فقط إنشاء مثيل جديد داخل الدالة؟