使用Java8流API是否可以在分隔输入流的基础上创建Message pullNext()
之类的接口,其逻辑步骤如下所示?
pullNext()
有点是一个由并发池提供解组的破坏者。与此类似,也许(在InputStream之上实现stash
是要整理的那个):
Iterable<String> stash = Iterables.cycle("one", "two", "three");
Iterator<String> sink = StreamSupport.stream(stash.spliterator(), true).
.parallel().map((x)->x+"-unmarshalled").iterator();
while (sink.hasNext()) process(sink.next()); // do something with decoded message
答案 0 :(得分:2)
一个问题是parallelStream ForkJoinPool使用当前线程来贡献池。这意味着没有当前线程可以执行此操作。
这样做的唯一现实方法是在单线程执行程序中启动它以启动parallelStream执行forEach
写入固定大小的BlockingQueue,并且当前线程可以使用队列的结果。 / p>
我怀疑你最好重新编写代码,这样就不需要pullNext
了。 e.g。
Iterable<String> stash = Iterables.cycle("one", "two", "three");
Iterator<String> sink = StreamSupport.stream(stash.spliterator(), true).
.parallel()
.map(x -> x + "-unmarshalled")
.forEach(x -> process(x));