Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing a for loop variable inside an inner class

I have an array of arrays of int.

DataArray[X][Y]

I would like to create a thread for each X, which iterates along Y. I cannot figure out how to pass the appropriate X value to each thread.

essentially i would like to be able to do

ExecutorService threadPool = Executors.newFixedThreadPool(10);
for (int i = 0; i < X; i++) {
  threadPool.submit(new Runnable() {
    public void run() {         
      Function_to_run(i);
    }
  });
}

Any help would be appreciated

like image 974
cpri Avatar asked May 17 '15 15:05

cpri


1 Answers

Only final values can be captured within a method-local-anonymous-inner-class. You need to change your code as follows :

for (int i = 0; i < X; i++) {
        final int index = i;
        threadPool.submit(new Runnable() {
             public void run() {

                  Function_to_run(index);

         }
     });
like image 162
Chetan Kinger Avatar answered Oct 21 '22 05:10

Chetan Kinger