0

Eclipseを使用してリモートデバッグを行っています。私の要件は、同時に 20 個の要求を作成し、デバッグ ブレークポイントを使用して 1 点で停止し、中断されたすべてのスレッドを同時に解放して、複数のスレッドが同時にコードにアクセスした場合のコードの動作をテストすることです。ただし、これを試してみると、1 つのスレッドだけがすべての要求を処理していることがわかりました Daemon Thread [http-0.0.0.0-8080-Processor60] (中断 (VcsInfoDAO の 440 行目のブレークポイント))

最初のリクエストが完了すると、2 番目のリクエストのみが、上記の同じスレッドによって提供されるブレークポイントに到達します。すべてのリクエストが単一のポイントに到達し、その後、すべてのスレッドがその後同時にコードにアクセスできるように、何らかの方法でスレッドを同時に解放するようにEclipseに設定はありますか?

どんな助けでも大歓迎です。

スーラブ

4

1 に答える 1

0

Eclipse は、あなたが見るものとは何の関係もありません。同時に呼び出されるはずのメソッド内のどこかにブレークポイントを設定し、クライアント コードが実際に 20 個の同時要求を開始し、最初の要求が終了した後に 2 番目の要求が処理されることに気付いた場合、同時ではありません。

考えられる説明は 2 つあります。

  • すべてのリクエストを処理する一意のスレッドがあります。複数のリクエストが同時に送信された場合、すべてのリクエストはキューに入れられ、1 つずつ処理されます。
  • 要求を同時に処理する複数のスレッドがありますが、クライアント コードは 20 個の要求を同時に送信するのではなく、20 個の要求を順次送信します。

とにかく、ブレークポイントを使用してそのようなことをテストすることは、良い解決策ではありません。20 個のスレッドごとに「続行 (F8)」ボタンを押す必要があるため、同時に再起動することはありません。これを行うには、20 で初期化されたCountDownLatchを使用することをお勧めします。

private CountDownLatch latch = new CountDownLatch(20);

public void run() {
    // some code
    // here we want to pause all 20 threads and restart them all at the same time
    latch.countDown(); // The 20th thread will open the barrier, and they will all restart at the same time
    latch.await();
}
于 2012-07-25T08:18:41.023 に答える