1

私は現在、サーバーと対話するエージェントを作成する必要がある Java のプロジェクトに取り組んでいます。

50 ミリ秒ごとに、サーバーは System.out に最後に出力したものを受け取り、System.in プリントストリームを介して「状態」として新しい行のセットを送信し、次のメッセージを分析して System.out に送信します。

また、サーバーが私から複数の出力を受信した場合、最新のもののみが考慮されます。

..

私の質問については:

私のプログラムは最初にツリーを構築し、各リーフ ノードを分析して最適なものを確認し、次の入力を待ちましたが、より深いツリー検索を再帰的に実行して、出力を「より良く」することができます (何度も何度も)より良い結果を返し続けるために)。

これと、サーバーが複数の出力を受信した場合、最新のもののみを取得するという事実を使用して、各レベルを実行し、結果を出力して次のレベルを開始できます。しかし、ここで私の問題が発生します...

次の入力を受け取ることになっている間、複雑なアルゴリズムで立ち往生することはできません。そのため、System.in を介して何かを受け取ったときに他のことをキャンセルしてから、関数の先頭に戻り、新しい入力セットで検索を再開する方法があるかどうか疑問に思っていました (そしてすすぎと繰り返し) ..)

これがすべて理にかなっているといいのですが、

ありがとうございます

4

1 に答える 1

3

ここでは、複数のスレッド (または複数のプロセス) が絶対に必要です。

への入力の受信System.inの問題と、アルゴリズムの問​​題を解決したと思います。Runnable次のステップは、それぞれをinterfaceにパッケージ化し、それぞれにキュー オブジェクトへの参照を渡すことです。これにより、生産者と消費者の関係が構築されます。

リスニングRunnable(プロデューサー) がメッセージを受け取るたびに、それをキューに入れる必要があります。すべての作業単位の後、アルゴリズム (コンシューマー) はそこにあるアイテムのキューを調べる必要があります。何かが見つかった場合は、通常どおり統合する必要があります。そうでない場合は、その作業を続行します。

Producer と Consumer の両方を独自のスレッドで開始し、同時に実行できるようにする必要があります。

于 2012-09-26T15:51:53.833 に答える