假设我有一个CompletableFuture,它包含一个阻塞调用,比如使用JDBC查询后端.在这种情况下,由于我没有将任何执行程序服务作为参数传递给CompletableFuture.supplyAsync(),因此通过后端获取资源的实际阻塞工作应该由公共Fork/Join池中的线程完成.让来自普通FJpool的线程阻塞调用不是不好的做法吗?我在这里的优点是我的主线程没有阻塞,因为我委托阻塞调用异步运行.在这里检查abt JDBC调用是否阻塞.如果这个推论是正确的,为什么可以选择使用带有CompletableFuture的默认公共FJpool?
CompletableFuture<List<String>> fetchUnicorns =
CompletableFuture.supplyAsync(() -> {
return unicornService.getUnicorns();
});
fetchUnicorns.thenAccept(/**Do something with the result*/);
Run Code Online (Sandbox Code Playgroud) 以下java 8流没有任何终端操作.下面的块不应该是懒惰的,因为我只有中间操作并且还没有通过终端操作进行操作.当我运行这个块时,我得到"流已经被操作或关闭".请参阅https://ideone.com/naR7GB
Stream<String> s = Stream.of("A", "B");
s.map(String::toUpperCase);
s.map(String::toLowerCase);
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
java.lang.IllegalStateException: stream has already been operated upon or closed
at java.util.stream.AbstractPipeline.<init>(AbstractPipeline.java:203)
at java.util.stream.ReferencePipeline.<init>(ReferencePipeline.java:94)
at java.util.stream.ReferencePipeline$StatelessOp.<init>(ReferencePipeline.java:618)
at java.util.stream.ReferencePipeline$3.<init>(ReferencePipeline.java:187)
at java.util.stream.ReferencePipeline.map(ReferencePipeline.java:186)
Run Code Online (Sandbox Code Playgroud) 我是Spring AOP的新手,正在阅读切入点指示符的文档.这个和目标指示符对我来说都是一样的.有人可以用更好/更清洁的例子来解释吗?谢谢
this - 限制匹配连接点(使用Spring AOP时执行方法),其中bean引用(Spring AOP代理)是给定类型的实例
eg: this(com.xyz.service.AccountService)
Run Code Online (Sandbox Code Playgroud)
代理实现AccountService接口的任何连接点(仅在Spring AOP中执行方法):
target - 限制匹配到连接点(使用Spring AOP时执行方法),其中目标对象(被代理的应用程序对象)是给定类型的实例
eg: target(com.xyz.service.AccountService)
Run Code Online (Sandbox Code Playgroud)
目标对象实现AccountService接口的任何连接点(仅在Spring AOP中执行方法)
链接:http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/aop.html
许多 XML 模式在其规范中指定了严格的和过渡的模式定义。例如:http : //docs.oasis-open.org/xliff/v1.2/os/xliff-core.html#AppDTD或微软的 OOXML XSD ( http://en.wikipedia.org/wiki/Office_Open_XML )。不知道实际的区别是什么,为什么首先需要两个 XSD,有什么想法吗?
有许多文章解释了为什么应该避免异常流控制并被认为是反模式.但是,在以下示例中使用异常流量控制是否有意义?
例如:我有一个包含许多值的枚举类型,需要检查它是否包含给定的字符串.
使用Enum.valueof的解决方案将抛出IllegalArgumentException并可用于返回false.甚至Apache commons lang3 lib也使用相同的.我们在所有后续调用中重用一次延迟初始化的enumConstantDirectory映射.
return EnumUtils.isValidEnum(MyEnum.class, myValue);
Run Code Online (Sandbox Code Playgroud)
其他解决方案是迭代.
return Stream.of(MyEnum.values()).anyMatch(e -> e.name().equals(value));
Run Code Online (Sandbox Code Playgroud) 我为Prod-Cons问题编写了一个简单的阻塞队列示例.以下示例不起作用; 除非我在等待线程上使用notify交换enqueue/dequeue逻辑的add/remove部分.在BlockingQueue的任何实现中,我都找不到任何关于此行为的明确解释.在enqueue部分,添加元素然后通知不应该是正确的吗?通过这种方式,我可以保证当Consumer线程运行时,它应该有一个元素给消费者,并且不会返回null.请解释.
import java.util.LinkedList;
import java.util.Queue;
public class BlockingQueueCustom<T> {
private int size = 10;
private Queue<T> queue = new LinkedList<T>();
public BlockingQueueCustom(int s) {
this.size = s;
}
public synchronized void enqueue(T element) throws InterruptedException {
while (queue.size() == size) {
wait();
}
queue.add(element); //Comment this part to make it work
if (queue.size() == 0) {
this.notifyAll();
}
//queue.add(element); Uncommenting this will make it work
}
public synchronized T dequeue() throws InterruptedException {
while (queue.size() == 0) {
this.wait(); …Run Code Online (Sandbox Code Playgroud) java ×4
java-8 ×2
aop ×1
asynchronous ×1
enums ×1
spring ×1
spring-aop ×1
spring-mvc ×1
xml ×1
xsd ×1