متى وكيف تستخدم 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`، لكن لماذا نحتاج هذا؟ أليس من الأسهل فقط إنشاء مثيل جديد داخل الدالة؟