anyOf
создает только новое будущее, позволяющее запланировать другие операции, которые будут выполняться, когда хотя бы один из указанных фьючерсов будет завершен. Он не влияет ни на один из его аргументов.
Но обратите внимание, что основной метод использует его только для цепочки другой операции, не дожидаясь завершения какого-либо будущего. Он просто выполняет еще один doSomething()
, что занимает специально не указанное время. Затем возвращается метод main
, и в стандартной среде JVM завершает работу, когда обнаруживает, что существуют только потоки демона.
Поскольку это завершение JVM не влияет на какие-либо фоновые операции, существует нет гарантии по поводу завершения. В принципе, даже вывод невозможен.
Но связанные операции определяют зависимости, которым подчиняются.
1 → 2
. Следовательно, вы никогда не увидите 2
без 1
в выводе. И когда присутствуют оба числа, 1
должно быть перед 2
. (1 → 2 | 3) → 4
. Если вы видите 4
, должно быть хотя бы одно из 2
или 3
, и оно должно быть до 4
. Когда это 2
, применяется и первый пункт. Но обратите внимание, что когда присутствуют оба, 2
и 3
, только один из них должен быть перед 4
, поэтому 3412
будет допустимым выходом.
Помимо этих правил, порядок может быть произвольным, и, как сказано, завершение не гарантируется. Вы могли увидеть подошву 1
или подошву 3
, или 1
и 3
в произвольном порядке. Но, как объяснялось выше, вы не можете увидеть подошву 2
или подошву 4
. Вы можете набрать go в каждом предложенном ответе и проверить, не нарушает ли он одну из зависимостей. Если нет, то это возможный исход.