チェーンを作成し、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;
)
将来の私の目標は、ほとんど同じクラス ファイル (チェーンを作成したクラス ファイルではない) を持つスレーブ プロセスでチェーンを実行することです。それを実行します。
前述のように、インスタンス化時にループで作成される最終的な vars は、これのトリッキーな部分だと思います。すなわち。
pos = pos.thenApply( (s)->{ return s+" plus"+
val
;} );
これを達成する方法について誰か提案がありますか?