如何在多线程环境中控制lambda访问局部变量?

时间:2018-06-06 15:28:46

标签: java multithreading lambda

在Java中,我有一个类似于以下的程序:

public void asyncLambda(Notifier notifier)
{
    DataUtil.getDataAsync((data) -> {
        // This code would be called on a new thread.
        for(Object o : data)
        {
            notifier.notify(o);
        }
    });
}

这编译并运行(据我所知)。我很好奇的是我正在使用的notifier对象。

我能想到的可能性是

  • 原始调用时对notifier的引用将传递给lambda。
  • 当lambda代码被执行时,它会被移回到函数的当前堆栈帧中,即使该函数被另一个调用者调用(从而意味着通知符现在不同)。
  • 整个堆栈框架被复制到新线程中(这有点类似于第一种可能性,但现在所有可能存在的变量也在那里)。

0 个答案:

没有答案