0

我正在使用 eclipse 进行远程调试。我的要求是同时发出 20 个请求,使用调试断点在某一点停止,然后同时释放所有挂起的线程,以测试多个线程同时访问代码时代码的行为。但是,当我尝试此操作时,我发现只有一个线程在为所有请求提供服务 Daemon Thread [http-0.0.0.0-8080-Processor60](暂停(VcsInfoDAO 中第 440 行的断点))

当第一个请求完成时,只有第二个请求到达上述同一线程服务的断点。eclipse中是否有任何设置可以使所有请求都到达一个点,然后以某种方式同时释放线程,以便所有线程同时访问代码。

任何帮助将不胜感激。

苏拉布

4

1 回答 1

0

Eclipse 与您所看到的无关。如果您在应该同时调用的方法内的某个位置设置断点,并且如果您的客户端代码确实启动了 20 个并发请求,并且如果您观察到第二个请求仅在第一个请求完成后才被处理,那么您的想法是并发的不是。

我看到两种可能的解释:

  • 你有一个独特的线程来处理所有的请求。如果多个并发发送,则所有请求都排队处理并一一处理
  • 您有多个线程同时处理请求,但客户端代码顺序发送 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 回答