в общем, если кому интересно, то вот ответ: может ли поток, который делает thenApply, увидеть my = 0? нет, не может, потому что инстанс лямбды захватывает это значение в своё final-поле т.е. то что выше - это эквивалент чего-то типа такого: CompletableFuture<Integer> future = CompletableFuture.supplyAsync(() -> 42); int my = 123; future.thenApply(new MyFunc(my)); где MyFunc - это сгенерированная компилятором лямбда в похожая на private static class MyFunc implements Function<Integer, Integer> { private final int my; private MyFunc(int my) { this.my = my; } @Override public Integer apply(Integer it) { return it + my; } }
Вроде стандартно, сама идея должна предложить в атомик референс обернуть переменную, которую нужно менять
ну её не нужно менять
пришлось байт код поизучать, чтобы дойти до этого ответа?) или какой-то проще путь
Есть один парень =)
а.. хорошо, когда есть один парень)
Но, кстати, тема с байткодом интересная, надо сделать
Обсуждают сегодня