Why does a method reference not start a thread in this example?
package example;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ESMethodReference {
int i1, i2, result = 0;
ESMethodReference(int i1, int i2){
this.i1 =i1;
this.i2 = i2;
}
public Runnable calculate(){
System.out.print("In calculate()");
return new Runnable() {
@Override
public void run() {
result += i1 + i2;
System.out.print(" creating result");
}
};
}
public static void main(String[] args) throws InterruptedException{
ESMethodReference es = new ESMethodReference(1, 1);
ExecutorService executorService = Executors.newSingleThreadExecutor();
for (int i = 0; i < 2; i++){
executorService.submit(es.calculate());
Thread.sleep(100); // Allow new thread to run
System.out.println("\tes.calculate() result incremented " + es.result );
executorService.submit(es::calculate);
Thread.sleep(100); // Allow new thread to run
System.out.println("\tes::calculate result NOT incremented " + es.result );
}
executorService.shutdown();
}
}
Output:
In calculate() creating result es.calculate() result incremented 2
In calculate() es::calculate result NOT incremented 2
In calculate() creating result es.calculate() result incremented 4
In calculate() es::calculate result NOT incremented 4