2

私は一日中ネットを荒らしていました。本当の答えがなければ。誰かが私にアドバイスをくれることを願っています。

私が構築しようとしているのは、オークションをポーリングし、購入したいアイテムが利用可能になるかどうかを確認する必要がある自動バイヤー タイプのアプリケーションです。

概念的には、(停止するように指示するまで) 常に実行されるスレッドを開始できるはずだと考えています。

アイテムが見つかったら、そのアイテムを入札または購入する別のスレッドを開始する必要があります。

私は、私が立ち往生しているスレッドだけのメカニズムを実行するコードをすべて完了しました。

最初の問題は、スレッド /runnable と実行サービスを使用してスレッドを開始できたことです。

しかし、すべての場合において、スレッドに処理を続行させる方法がわかりません.....そして、プログラムを停止したいときにスレッドを停止するある種のコマンドを発行できるようにします...

いくつかのガイダンスをいただければ幸いです

4

1 に答える 1

1

私が理解しているように、あなたは次に心に留めています:

  1. 掘り出し物を見つけるために時々いくつかのサービスをポーリングするスレッドを持っている
  2. 見つかった場合は、このような優れたツールを持っていない他の購入者を入札、購入、および怒らせるために、この具体的なアイテムのために別のスレッドを生成する必要があります。
  3. アイテムを購入したくない場合は、特定のスレッドを停止します。

これらはすべて、JVMスレッドプリミティブを使用して独自のスレッドフレームワークで実装できます(そうするのはとても楽しいでしょう!)。ただし、そのためにSpringFrameworkを使用することをお勧めしますタスクの実行とスケジューリング では、その方法について詳しく説明しています。本質的に:

  • 定期的にメソッドを実行してもらいたいですか?着るだけ@Scheduled!(アドレス#1)
  • いくつかのメソッドを非同期で実行したいですか?@Asyncを入れてください!(アドレス#1)
  • #3-スレッドのキャンセル/停止はそれ自体が問題です。この質問/回答を見てください。私がこれまでに見つけた最良の(そして推奨される)方法は、バックグラウンドスレッドに停止を求めるフラグとして、メモリ内の共有変数またはデータベース内の値(アプリケーションが分散環境で実行されている場合)を使用することです。

簡単そうに聞こえますが、フードの下で何が起こっているのかを理解し、春について少し学ぶ必要があります。また、 @Sheculed/@Asyncタスクは2つの異なるスレッドプールで実行されるため、それらのデフォルトサイズ値を更新することをお勧めします-実稼働展開後にのみ学んだ教訓:-)

于 2012-12-22T11:44:20.987 に答える