Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将参数传递给在单独线程中调用的函数_Java_Android_Multithreading_Parameters - Fatal编程技术网

Java 将参数传递给在单独线程中调用的函数

Java 将参数传递给在单独线程中调用的函数,java,android,multithreading,parameters,Java,Android,Multithreading,Parameters,考虑以下Android上的Java代码。我在for循环中启动线程。在线程内部,我使用for循环更改的参数调用一个方法。参数“start_index”和“end_index”的传递是否正确,以便for循环在调用线程后不会更改这些参数的值 for (int i=0; i<chunk_counts*chunk; i+=chunk){ final int start_index=i; //start_index

考虑以下Android上的Java代码。我在for循环中启动线程。在线程内部,我使用for循环更改的参数调用一个方法。参数“start_index”和“end_index”的传递是否正确,以便for循环在调用线程后不会更改这些参数的值

for (int i=0; i<chunk_counts*chunk; i+=chunk){

                        final int  start_index=i; //start_index
                        final int end_index = i + chunk; //set end_index

                        new Thread(new Runnable() {
                            public void run() {

                                threadCount.getAndIncrement();
                                ProcessAttendanceAuto(data, start_index, 
end_index);
                            }
                        }).start();


                    }

for(int i=0;i这些值实际上是
final
,因此它们是线程安全的,您不必担心它们会随着时间的推移而改变。此外,当传递到
可运行的
和调用
ProcessAttendanceAutho
时,它们会被复制

比如说这个,

final int startIndex = i;
final int endIndex = i + 1;
new Thread(new Runnable() {
    public void run() {
        final int test = startIndex;
        final int test2 = endIndex;
    }
}).start();
翻译成

NEW java/lang/Thread
DUP
NEW so/Test$1
DUP
ILOAD 2
ILOAD 3
INVOKESPECIAL so/Test$1.<init> (II)V
INVOKESPECIAL java/lang/Thread.<init> (Ljava/lang/Runnable;)V
在其构造函数中接受两个
int
参数。

这意味着将复制值
startIndex
endIndex

太好了!非常感谢您共享此信息。多线程始终是一个挑战。
INVOKESPECIAL so/Test$1.<init> (II)V
class $1 implements Runnable