मैं जावा में एक प्रोग्राम बना रहा हूं जो एक दूसरे के खिलाफ कुछ कारों को दौड़ता है। प्रत्येक कार एक अलग धागा है।क्या पूर्व-वृद्धि ऑपरेटर थ्रेड-सुरक्षित है?
जब कार दौड़ पूरी करती है, तो प्रत्येक व्यक्ति इस विधि को कॉल करता है। मैंने अलग-अलग टाइमर गति पर विधि का परीक्षण किया है, और ऐसा लगता है कि यह ठीक काम करता है। लेकिन मुझे एहसास है कि प्रत्येक थ्रेड परिवर्तनीय कारों को एक्सेस कर रहा है, कभी-कभी एक ही समय में (कम से कम उस दायरे पर दिनांक कमांड मुझे दे रहा है)।
तो मेरा सवाल है: क्या यह विधि थ्रेड-सुरक्षित है?
public static String completeRace()
{
Date accessDate = new Date();
System.out.println("Cars Complete: " + carsComplete + " Accessed at " + accessDate.toString());
switch(++carsComplete)
{
case 1: return "1st";
case 2: return "2nd";
case 3: return "3rd";
default: return carsComplete + "th";
}
}
या वृद्धि से पहले कुछ पर सिंक्रनाइज़ करें। –
@Ted: मैं शर्त लगाता हूं कि कुछ पर समन्वय करना अधिक महंगा है। –
@Eric - मुझे आश्चर्य होगा अगर परमाणु इंटेगर ने कुछ बिंदु (शायद मूल कोड में) कुछ सिंकिंग नहीं किया। बेंचमार्क करना दिलचस्प होगा। परमाणु इंटेगर के स्रोत से, ऐसा लगता है कि यह एक परमाणु तुलना-और-सेट एल्गोरिदम पर निर्भर करता है जो तब तक पुनः प्रयास करता है जब तक कि कोई समस्या न हो। इसके लिए कोई बुरी स्थिति नहीं है; अत्यधिक थ्रेडेड परिदृश्यों में, मुझे लगता है कि यह यादृच्छिक समय पर बहुत धीमा हो सकता है। –