将元素添加到多个线程的列表中时会被跳过

时间:2019-04-06 15:42:14

标签: java multithreading runnable executorservice

我正在处理一些图像,然后将它们复制到多个线程中的某个位置。作为处理的一部分,我还将它们添加到列表中。

列表(我在其中添加图像路径)缺少太多元素。我处理了大约2000张图像,而列表中只有3张。

以下是我的代码的一些相关摘要:

ImageHelper.java

/**
 * @ManyToOne(targetEntity="Forum", inversedBy="subForums")
 * @JoinColumn(name="parent_id", referencedColumnName="id")
 */
private $parentForum;

ImageProcessRunnable.Java

public class ImageHelper {

    private static List<String> filePaths = Collections.synchronizedList(new ArrayList<String>());

    public synchronized static List<String> getFilePaths(){
        return filePaths;
    }
}

ImageService.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();
        }
    }
}

代码正在处理所有映像并将其复制到驱动器,但这只是不将所有映像添加到filePaths列表中。

0 个答案:

没有答案