0

チェーンを作成し、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;} );

これを達成する方法について誰か提案がありますか?

4

1 に答える 1