很老的一篇文章Higher-Order Java Parallelism, Part 1: Parallel Strategies and the Callable Monad。
如果不愿意使用Scala,也可以使用Java实现函数语言Erlang和 Parallel Haskell中并发monad和懒赋值:
Monad写法:
public static <A, B> F<Callable<A>, Callable<B>> fmap(final F<A, B> f) { return new F<Callable<A>, Callable<B>>() { public Callable<B> f(final Callable<A> a) { return bind(a, new F<A, Callable<B>>() { public Callable<B> f(final A ab) { return new Callable<B>() { public B call() { return f.f(ab); } }; } }); } }; }
|
懒赋值:
public static <A> Callable<A> obtain(final Future<A> x) { return new Callable<A>() { public A call() throws Exception { return x.get(); } }; }
|
banq注:个人在jdonframework中使用disruptor/future两种方式实现懒赋值,disruptor吞吐量要比future大些。