我想创建一个CompletableFuture
链,将其作为字节码/参数序列化到磁盘,并在将来的某个时候再次运行它。例如:
CompletableFuture<String> chain = new CompletableFuture<String>();
CompletableFuture<String> pos = chain;
for (int ii = 0; ii < 4; ++ii) {
final int val = ii;
pos = pos.thenApply( (s)->{ return s+" plus"+val;} );
}
pos = pos.thenApply( (s)->{ return "The final answer is "+s;} );
saveDisk( "chaindata.dat", chain, pos );
/////
// at some time in the future, perhaps in another program
Pair<CompletableFuture<String>,CompletableFuture<String>> newChain = loadFrom( "chaindata.dat" );
newChain.getA().complete("Hello");
String result = newChain.getB().get(); // should get hello with all post processing
// result==The final answer is Hello plus0 plus1 plus2 plus3
当然,这个棘手的事情是,即使字节码存储在当前的类文件中(可以用 检索Class.getResource()
),我也需要在链中设置的最终变量也被持久化。
(参见上面的 for 循环final int var = ii;
)
我未来的目标实际上是在具有大多数相同类文件(但不是创建链的类文件)的从属进程上运行链我会编写字节码/数据,将其重新加载到从属进程上,然后运行。
如前所述,我相信在实例化时在循环中创建的最终变量是其中的棘手部分。IE。
pos = pos.thenApply( (s)->{ return s+" plus"+
val
;} );
有没有人建议如何做到这一点?