在多线程环境中的eclipse中进行远程调试

时间:2012-07-25 07:08:15

标签: eclipse multithreading

我正在使用eclipse进行远程调试。我的要求是同时发出20个请求,使用debug breakpoint在一个点停止,然后同时释放所有挂起的线程,以测试多个线程同时访问代码时代码的行为方式。但是,当我尝试这个时,我发现只有一个线程正在处理所有请求 守护程序线程[http-0.0.0.0-8080-Processor60](暂停(VcsInfoDAO中第440行的断点))

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

任何帮助都将受到高度赞赏。

Sourabh

1 个答案:

答案 0 :(得分: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();
}