为什么这段代码在 Java 8 和 Java 11 中表现不同?
private static String test2() {
CompletableFuture
.runAsync(() -> IntStream.rangeClosed(1, 20).forEach(x -> {
try {
Thread.sleep(500);
System.out.println(x);
} catch (InterruptedException e) {
e.printStackTrace();
}
}));
return "Finish";
}
Run Code Online (Sandbox Code Playgroud)
我希望它打印完成,然后以 500 毫秒的间隔打印从 1 到 20 的数字,然后停止执行,它在 Java 8 中正常工作。
然而,当我在 Java 11 上运行完全相同的方法时,它打印 Finish 并终止,而没有调用 runAsync(...) 代码。我设法通过添加这样的 ExecutorService 来启动它
private static String test2() {
final ExecutorService executorService = Executors.newFixedThreadPool(10);
CompletableFuture
.runAsync(() -> IntStream.rangeClosed(1, 10).forEach(x -> {
try {
Thread.sleep(500);
System.out.println(x);
} catch (InterruptedException e) { …
Run Code Online (Sandbox Code Playgroud) 我正在研究设计模式,有一刻让自己想到了一个想法,即工厂和抽象工厂等大多数创建模式在依赖注入环境的范围内并不是那么有用,在这种环境中我们通常不使用new
关键字创建对象,而是“从某种上下文中注入”它们。我也明白我很可能是错的,我需要一个很好的解释来把事情弄清楚。
我有一个问题,我是否需要在 Spring Boot 中使用 @Transactional 注释使用 ElasticsearchRepository 的 findBy.. 方法的方法?