我将如何使用 ImageJ 中的线程打开文件夹? (Java)

How would I open a folder using threads in ImageJ? (Java)

作为我的 ImageJ 插件项目的一部分,我需要打开多达 3000 张图像作为 图像堆栈。 用户选择一个文件夹,其中包含带有

的所有文件
DirectoryChooser dirChoos = new DirectoryChooser("Select Folder");
String filePath = dirChoos.getDirectory();

我目前打开文件的方法是

FolderOpener opener = new FolderOpener();
ImagePlus imp = opener.openFolder(filePath);
ImageStack stack = imp.getImageStack();

这有效,但是对于较大的文件夹,这会使插件 运行 时间增加 4 或 5 分钟。虽然我知道打开大文件夹显然需要更多时间,但如果我能减少一点就好了。

我尝试实现的方法是

File folder = new File(filePath);
String[] listOfFiles = Folder.list();
Arrays.sort(listOfFiles); // to make sure the stack is in the right order

通过使用 Arrays.copyOfRange 将它的 listOfFiles 拆分(为了参数的缘故分成 3 个)并将它们传递给扩展 Thread

的对象
openFolder r1 = new openFolder(listOfFiles_part1);
openFolder r2 = new openFolder(listOfFiles_part2);
openFolder r3 = new openFolder(listOfFiles_part3);

new Thread(r1).start();
new Thread(r2).start();
new Thread(r3).start();

openFolder 的方法使用 listOfFiles_part 从文件中形成一个 ImagePlus 实例数组

int len = Array.getLength(listOfFiles_part)
ImagePlus[] impArray = new ImagePlus[len];
for (int a = 0; a < len; a++ ) {
     impArray[a] = new ImagePlus((listOfFiles_part[a]).getPath());
}

然后,返回impArrays,并由数组组成ImageStack。

然而,这看起来确实有点迟钝,而且到目前为止我还没有太多运气来实施。

有没有更好的方法使用线程从文件夹中获取ImageStack? (使用线程甚至一定会加快进程吗?)

如有任何帮助,我们将不胜感激。 干杯

还有一种方法。 如果您使用 java 8 并行方法更简单

List<ImagePlus> impArray = new ArrayList<ImagePlus>();
listOfFiles_part.parallelStream()
.forEachOrdered(i -> impArray.add(new ImagePlus(i.getPath()));

否则您可能会使用线程池,因为您不知道根据硬件优化的线程数。