আমার কাছে একটি অ্যারেলিস্ট রয়েছে যা আমি রেসকার অবজেক্টগুলি ধরে রাখতে ব্যবহার করতে চাই যা থ্রেড ক্লাসটি সম্পাদন শেষ হওয়ার সাথে সাথে প্রসারিত হয়। রেস নামে একটি শ্রেণি একটি কলব্যাক পদ্ধতি ব্যবহার করে এই অ্যারেলিস্টটি পরিচালনা করে যা রেসিকার অবজেক্টটি সম্পাদন শেষ হলে কল করে। অ্যাডফিনিশার (রেসকার ফিনিশার) কলব্যাক পদ্ধতিটি অ্যারেলিস্টে রেসকার আইটেম যুক্ত করে। এটি থ্রেডগুলি কার্যকর করা শেষ করার আদেশ দেয়।
আমি জানি যে অ্যারেলিস্টটি সিঙ্ক্রোনাইজ করা হয়নি এবং এটি থ্রেড-নিরাপদ নয়। আমি একটি নতুন অ্যারেলিস্টে পাস করে এবং ফিরে সংগ্রহটি একটি অ্যারেলিস্টে বরাদ্দ করে আমি কালেকশন.সিনক্রোনাইজড কালেকশন (সি সংগ্রহ) পদ্ধতিটি ব্যবহার করার চেষ্টা করেছি। তবে এটি আমাকে একটি সংকলক ত্রুটি দেয়:
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
ইন্টারফেসটি মাল্টিথ্রেডিংয়ে খুব কার্যকর হতে যথেষ্ট পর্যাপ্ত নয়))