Я обрабатываю некоторые изображения и копирую их в несколько потоков. В процессе обработки я также добавляю их в список.
В списке (в который я добавляю пути к изображениям) отсутствует так много элементов. Я обработал около 2000 изображений, и список получил только 3.
Вот несколько соответствующих фрагментов моего кода:
ImageHelper.java
public class ImageHelper {
private static List<String> filePaths = Collections.synchronizedList(new ArrayList<String>());
public synchronized static List<String> getFilePaths(){
return filePaths;
}
}
ImageProcessRunnable.Java
public class ImageProcessRunnable implements Runnable {
FObject action;
ImageHelper imageHelper = new ImageHelper();
public ImageProcessRunnable(FObject action) throws IOException {
this.action = action;
}
public void run() {
try {
String filePath = imageProcessor.processImage(file, materialNumberImgName,
ImageHelper.getTempLocation(), ImageHelper.getBoxLocation(), idA2A2, logReport);
// I do get all the file paths in the above line from image processor.
ImageHelper.getFilePaths().add(filePath);
} catch (Exception e) {
e.printStackTrace();
}
}
}
ImageService.java
public class ImageService {
List<FObject> list = new Vector<FObject>(results);
public static void loadImages() throws IOException {
try {
SessionContext session = SessionContext.getContext();
ExecutorService pool = Executors.newFixedThreadPool(numberOfThreads);
for (FObject action : list) {
if (action instanceof FObject) {
Runnable run = new ImageProcessRunnable(action);
SessionThread th=new SessionThread(run, session);
pool.execute(th);
}
System.out.println("List Size is: "+ImageHelper.getFilePaths().size());
}
pool.shutdown();
if (pool.awaitTermination(2, TimeUnit.SECONDS)) {
pool.shutdownNow();
}
}
}
}
Код обрабатывает и копирует все изображения на диск, но он просто не добавляет их все в список filePaths.