如何将for循环的索引变量传递给匿名的Thread/Runnable

mma*_*ian 1 java io multithreading for-loop file

我搜索过类似的问题,但他们没有涉及for循环.我有以下代码:

    image = new BufferedImage[maxFiles];
    for (int i = 0; i < maxFiles; i++) {
        new Thread(){
            public void run() {                 
                try {
                    file = new File("0" + i + ".jpg");
                    image[i] = ImageIO.read(file);
                } catch (IOException e) {e.printStackTrace();}
            }
        };
    }
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我希望通过自己的线程加载每个图像文件以优化一点.不幸的是,for循环的变量i不能通过run方法传递,我不能使它成为final或static.你怎么解决这个问题?

khe*_*ood 5

您可以使用相同值的最终变量.

image = new BufferedImage[maxFiles];
for (int i = 0; i < maxFiles; i++) {
    final int index = i;
    new Thread(){
        public void run() {                 
            try {
                file = new File("0" + index + ".jpg");
                image[index] = ImageIO.read(file);
            } catch (IOException e) {e.printStackTrace();}
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

你可能也想开始你的线程.