Java 在并行执行环境中获取正确的方法 return 值

Java get correct method return value in parallel execution environment

我有两个方法可以在我的 java class 中并行执行。想象一下方法 a 通过传递 fileA 调用 getList 方法并获取 getList 方法返回的字符串列表,方法 b 通过传递 fileB 调用 getList 方法并获取 getList 返回的列表。(这些列表将是调用者传递的适当文件的内容)

public void a(){
List<String> list = getList(fileA);

    for(String s: list){
       //Analyse list and do something here 
    }
}

public void b(){
    List<String> list = getList(fileB);

    for(String s: list){
       //Analyse list and do something here 
    }
}

public List<Stirng> getList(File file){

    //Read lines in the file in to an array list

    //Return List 
}

在并行方法执行的场景下,我认为可能会出现如下情况, 在通过 getList 方法 b 读取文件 A 的一半时,它会尝试使用相同的 getList 方法读取文件 B。

我想澄清一下,在这种情况下,JVM 是否保证我们从方法 a 和方法 b 的调用中获得正确的结果?

如果不是,我该如何处理这种情况?

你能尝试在 getList(File) 中加入某种同步机制并测试一下吗?

public 同步 getList(文件){}

如果没有写入发生,调用同一个方法不会影响之前的调用。为什么你认为它应该?这与 JVM 无关,但与一般编程无关。

如何JVM保证不同线程方法调用同一个方法不受影响?

JVMRuntime Data Area,每个线程在启动时会创建自己的数据区,而这些数据区会在线程存在时被销毁。所以当线程的方法执行时,他们会使用自己的数据区,而不会影响其他线程的调用。

如果getList会导致side effect,你需要lock它。