मेरे पास एक ArrayList है जो मैं RaceCar ऑब्जेक्ट्स को होल्ड करने के लिए उपयोग करना चाहता हूं जो थ्रेड क्लास का विस्तार करते हैं जैसे ही वे निष्पादित होते हैं। एक वर्ग, जिसे रेस कहा जाता है, एक कॉलबैक पद्धति का उपयोग करके इस ArrayList को संभालता है जिसे रेसकार ऑब्जेक्ट तब निष्पादित करता है जब इसे निष्पादित किया जाता है। कॉलबैक विधि, addFinisher (रेसकार फिनिशर), ArrayList में रेसकार ऑब्जेक्ट जोड़ता है। यह उस आदेश को देने वाला है जिसमें थ्रेड्स निष्पादन को समाप्त करते हैं।
मुझे पता है कि ArrayList सिंक्रनाइज़ नहीं है और इस प्रकार थ्रेड-सुरक्षित नहीं है। मैंने एक नए ArrayList में पास होकर और ArrayList में दिए गए Collection को असाइन करके कलेक्शंस। SynchronizedCollection (c Collection) पद्धति का उपयोग करने की कोशिश की। हालाँकि, यह मुझे एक संकलक त्रुटि देता है:
Race.java:41: incompatible types
found : java.util.Collection
required: java.util.ArrayList
finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars));
यहाँ प्रासंगिक कोड है:
public class Race implements RaceListener {
private Thread[] racers;
private ArrayList finishingOrder;
//Make an ArrayList to hold RaceCar objects to determine winners
finishingOrder = Collections.synchronizedCollection(new ArrayList(numberOfRaceCars));
//Fill array with RaceCar objects
for(int i=0; i<numberOfRaceCars; i++) {
racers[i] = new RaceCar(laps, inputs[i]);
//Add this as a RaceListener to each RaceCar
((RaceCar) racers[i]).addRaceListener(this);
}
//Implement the one method in the RaceListener interface
public void addFinisher(RaceCar finisher) {
finishingOrder.add(finisher);
}
मुझे जो जानने की जरूरत है, क्या मैं एक सही दृष्टिकोण का उपयोग कर रहा हूं और यदि नहीं, तो मुझे अपने कोड को सुरक्षित बनाने के लिए क्या उपयोग करना चाहिए? सहायता के लिए धन्यवाद!
List
इंटरफ़ेस वास्तव में मल्टीथ्रेडिंग में बहुत उपयोगी होने के लिए पर्याप्त नहीं है।)