Java 8 方法引用不启动线程?

标签 java java-8

为什么在这个例子中方法引用没有启动线程?

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();
    }
}

输出:
在calculate() 创建结果es.calculate() 结果增加2
在calculate() es::calculate 结果没有增加2
在calculate() 创建结果es.calculate() 结果增加4
在calculate() es::calculate 结果未增加4

最佳答案

因为那些是不同的东西 - 路过 es::calculate与通过相同:

new Runnable() {
     @Override
     public void run() {
         es.calculate();
     }
}

显然,这与以下内容不同:
new Runnable() {
     @Override
     public void run() {
         es.calculate().run();
     }
}

关于Java 8 方法引用不启动线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44913562/

相关文章:

java - Java 8 中自定义流方法支持延迟/延迟并行的最佳方法

java - 如何保护 MySQL 用户名和密码不被反编译?

java - 如何使用 Selenium 单击 href 链接

java - 我可以给 lambda 起个名字吗?

Java - 返回指定泛型类型的列表

java - 将 Instant 格式化为 String 时出现 UnsupportedTemporalTypeException

java - 有什么方法可以降低以下java代码的复杂性吗?

java - Robot Framework - 设置 IE 的保护模式设置

installation - 哪里可以下载最低限度的 JRE?

java - JTable 单元格未在单击输入时更新