【发布时间】:2018-06-28 20:04:09
【问题描述】:
在这段代码中,我有两种使用 vavr 库的方法。从这个库中,我使用 Future 和方法,然后,这个方法在未来完成时运行,这是同步的,但是当线程调用这个方法中的方法“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
但有时控制台是空的。
非常感谢:)
【问题讨论】:
-
你的意思是说:“最终结果没有 [the]方法
printTime...”? -
另外:您采取了哪些步骤来解决问题或追查问题的根源?你有没有例如尝试单独运行
printTime?
标签: java multithreading future vavr vavr-test