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
保证不同线程方法调用同一个方法不受影响?
JVM
有Runtime Data Area,每个线程在启动时会创建自己的数据区,而这些数据区会在线程存在时被销毁。所以当线程的方法执行时,他们会使用自己的数据区,而不会影响其他线程的调用。
如果getList
会导致side effect
,你需要lock
它。
我有两个方法可以在我的 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
保证不同线程方法调用同一个方法不受影响?
JVM
有Runtime Data Area,每个线程在启动时会创建自己的数据区,而这些数据区会在线程存在时被销毁。所以当线程的方法执行时,他们会使用自己的数据区,而不会影响其他线程的调用。
如果getList
会导致side effect
,你需要lock
它。