从内部类引用的Java多线程局部变量必须是final或final
我在for循环中使用多线程。我试图为每个线程运行一个方法,该方法包含在for循环中声明的一些参数 我已经尝试过将变量移动到线程体中,并且效果很好。除了变量i和精度列表 不管我做什么,我还是会犯同样的错误。我真的需要在函数中传递I以及accuraciesListI必须是final,或者声明final后没有值修改 由于它不能是final,因为它是循环迭代器,所以只需复制该值并像这样使用复制的final值从内部类引用的Java多线程局部变量必须是final或final,java,multithreading,variables,netbeans,local,Java,Multithreading,Variables,Netbeans,Local,我在for循环中使用多线程。我试图为每个线程运行一个方法,该方法包含在for循环中声明的一些参数 我已经尝试过将变量移动到线程体中,并且效果很好。除了变量i和精度列表 不管我做什么,我还是会犯同样的错误。我真的需要在函数中传递I以及accuraciesListI必须是final,或者声明final后没有值修改 由于它不能是final,因为它是循环迭代器,所以只需复制该值并像这样使用复制的final值 final int iVal=i; new Thread(new Runnable() {
final int iVal=i;
new Thread(new Runnable() {
public void run() {
try {
runThread(classifierName, folder, path, dataFile, iVal, accuraciesList, dataSet);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
这是由于lambda表达式的范围: lambda的范围与表达式的定义一致。因此,任何 lambda表达式定义范围内的变量位于 它所代表的函数方法。这包括字段和最终或有效的最终本地 变量初始化后其值未更改的非最终局部变量 希望对你有帮助
final int iVal=i;
new Thread(new Runnable() {
public void run() {
try {
runThread(classifierName, folder, path, dataFile, iVal, accuraciesList, dataSet);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();