我在 Java 中有一个实用程序类,它正在访问一个大文件系统来访问一个文件。有些文件很大,所以发生的事情是Utility
班级正在谈论很多时间来访问这些文件,而我在这里面临性能问题。我计划实施多线程以提高性能,但我对如何做到这一点感到有些困惑。下面是 Utility 类的结构。
public class Utility {
public static void Method1(ArrayList values){
//do some processing
for(int i=0; i< values.size();i++){
ArrayList<String> details= MethodAccessFileSystem();
CreateFileInDir(details);
}
}
public ArrayList<String> MethodAccessFileSystem(){
//Code to access the file system. This is taking hell lot of time.
}
public void CreateFileInDir(ArrayList<String> values){
//Do some processing here.
}
}
我曾经使用以下语法在独立类中调用此 Utilty 类
Utility.Method1(values); //values is an ArayList.
现在我需要将上面的代码转换成多线程代码。我知道如何通过扩展 Thread 类或实现 Runnable 来创建线程。我对此有一个基本的想法。
但我需要知道的是我是否应该将整个 Utilty 类转换为实现 Runnable。或者 Utilty 类的某些部分是否需要分离并作为 Runnable 任务。我的问题是 for() 循环,因为这些方法是在循环中调用的。如果我分离出 MethodAccessFileSystem() 并将其作为一项任务将其工作。如果 MethodAccessFileSystem() 需要一些时间,那么如果我使用 Threadpoolexecutor 来安排固定数量的线程,JVM 会自动启动另一个线程。我是否需要暂停此方法或不需要它,否则 JVM 会小心的。主要问题在于 For 循环。
最后,我需要的是 Utility 类应该是多线程的,并且对方法的调用应该与上面的相同。
Utility.Method1(values); //values is an ArayList.
我正在考虑如何实现这一点。您能帮我解决这个问题,并就需要进行的设计更改提供您的建议和反馈。
谢谢维肯