С выпуском Java 8 теперь есть третий вариант.
Runnable
- функциональный интерфейс , что означает, что его экземпляры могут быть созданы с помощью лямбда выражения или ссылки на методы.
Ваш пример может быть заменен на:
new Thread(() -> { /* Code here */ }).start()
или если вы хотите использовать ExecutorService
и ссылку на метод:
executor.execute(runner::run)
Они не только намного короче, чем ваши примеры, но также обладают многими преимуществами, изложенными в других ответах на использование Runnable
по сравнению с Thread
, например, с одной ответственностью и использованием композиции, потому что вы не специализируетесь на Поведение потока. Этот способ также позволяет избежать создания дополнительного класса, если все, что вам нужно, это Runnable
, как и в ваших примерах.
Метод ZoneRules.getTransitions()
не перечисляет все переходы до бесконечности в будущее (очевидно). Это получает следующие два перехода:
ZoneId zoneId = ZoneId.of("Australia/Sydney");
ZoneRules rules = zoneId.getRules();
ZoneOffsetTransition nextTransition = rules.nextTransition(Instant.now());
System.out.println("Next transition at: " +
nextTransition.getInstant().atZone(zoneId));
ZoneOffsetTransition nextNextTransition =
rules.nextTransition(nextTransition.getInstant());
System.out.println("Next transition after that at: " +
nextNextTransition.getInstant().atZone(zoneId));
Выход:
Следующий переход по адресу: 2016-10-02T03: 00 + 11: 00 [Австралия / Сидней]
Следующий переход после этого: 2017-04-02T02: 00 + 10: 00 [Австралия / Сидней]
blockquote>
getTransitions()
(или ни один существующийgetFutureTransitions()
) - лучший пример, который я когда-либо видел, что могло быть полезным бесконечнымStream
. – Thirler 3 August 2016 в 07:55getFutureTransitions()
с бесконечнымStream
:Stream.iterate(rules.nextTransition(Instant.now()), t -> rules.nextTransition(t.getInstant()))
– Flown 3 August 2016 в 09:19ZoneRules
имеет две части - переходы (известные исторические), доступные черезgetTransitions()
, и правила перехода (неопределенное будущее), доступ к которым осуществляется черезgetTransitionRules()
. МетодnextTransition(Instant)
склеивает два элемента состояния вместе. – JodaStephen 3 August 2016 в 16:22