Будущее vavr не выполняет некоторый код с помощью метода andThen
В этом коде у меня есть два метода, использующих библиотеку vavr. Из этой библиотеки я использую Future с методом andThen, этот метод запускается, когда будущее завершено, и это происходит синхронно, но когда поток вызывает метод "printTime" в этом методе, все программы останавливаются, и тест успех. это метод
public void printTime(String m){
String pattern = "HH:mm:ss:SSS";
SimpleDateFormat formato = new SimpleDateFormat(pattern);
Date date = new Date();
String dateString = formato.format(date);
String retorno = dateString+" "+m;
System.out.println(retorno);
}
и это тест
@Test
public void futuroAndThen() {
Future<String> f1 = Future.of(()->"Julian");
Future<String> f2 = Future.of(()->"Carvajal");
Future<String> f3 = Future.of(()->"Montoya");
Future<String> fResult = f3.andThen(x-> {
System.out.println(x.get());
System.out.println(Thread.currentThread().getName());
printTime("andThen2"+Thread.currentThread().getName());
}).andThen(y->{
System.out.println("y:"+y.get());
System.out.println(Thread.currentThread().getName());
f2.andThen(x->{
System.out.println("f2: "+x.get());
System.out.println("thread f2 "+Thread.currentThread().getName());
});
printTime("andThen2"+Thread.currentThread().getName());
});
}
наконец, результат в методе printTime:
Montoya
pool-1-thread-3
y:Montoya
pool-1-thread-1
f2: Carvajal
thread f2 pool-1-thread-3
и с помощью метода:
Montoya
pool-1-thread-1
но в некоторые моменты консоль пуста.
большое спасибо вам:)
1 ответ
Ваш тест заканчивается и основной JUnit
поток бегуна выходит из JVM до того, как Future
мог закончить. Вот почему вы получаете противоречивые результаты на консоли, все зависит от времени выполнения Future
s, которые - с vavr 0.9.2 - происходят в кэшированном пуле потоков.
Если вы хотите синхронно ждать Future
чтобы быть завершенным, вы можете использовать
fResult = fResult.await();
в конце вашего теста. Тогда ваш тест будет ждать Future
экземпляры, чтобы закончить, и ваш вывод будет:
Montoya
pool-1-thread-4
23:56:59:570 andThen2pool-1-thread-4
y:Montoya
pool-1-thread-3
f2: Carvajal
thread f2 pool-1-thread-4
23:56:59:572 andThen2pool-1-thread-3