小编Chi*_*may的帖子

使用与CompletableFuture的默认公共fork/join池进行长时间阻塞调用是不好的做法吗?

假设我有一个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 asynchronous java-8 completable-future

11
推荐指数
2
解决办法
3320
查看次数

Java 8:尽管避免了终端操作,但请参阅"流已经被操作或关闭"

以下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)

java-8

6
推荐指数
1
解决办法
84
查看次数

有人可以解释这个和目标切入点指示符

我是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

java aop spring spring-mvc spring-aop

5
推荐指数
1
解决办法
1804
查看次数

XML 中的严格模式定义 (XSD) 和过渡模式定义 (XSD) 之间有什么区别

许多 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,有什么想法吗?

xml xsd

3
推荐指数
1
解决办法
514
查看次数

在某些情况下,异常流控制是否更好?

有许多文章解释了为什么应该避免异常流控制并被认为是反模式.但是,在以下示例中使用异常流量控制是否有意义?

例如:我有一个包含许多值的枚举类型,需要检查它是否包含给定的字符串.

使用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)

java enums

3
推荐指数
1
解决办法
53
查看次数

为什么在以下阻塞队列示例中调用notify()的顺序很重要?

我为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 multithreading

0
推荐指数
1
解决办法
138
查看次数