2012-07-25 92 views
0

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

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

任何帮助将高度赞赏。

苏拉布

回答

0

Eclipse与你所看到的没有任何关系。如果你在一个应该同时调用的方法内的某个地方设置断点,并且如果你的客户端代码真的启动了20个并发请求,并且如果你观察到第二个请求只在第一个请求完成后才被处理,那么你的想法并发不是。

我看到两种可能的解释:

  • 你有一个独特的线程处理所有的请求。如果多个请求同时发送,则所有请求都会排队并逐个处理
  • 您有几个线程并发处理请求,但客户端代码顺序发送20个请求,而不是并发发送20个请求。

无论如何,使用断点来测试这样的事情并不是一个好的解决方案。您必须点击20个线程中的每个线程的“继续(F8)”按钮,因此它们不会同时重新启动。你会贝特使用CountDownLatch初始化在20做到这一点:

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(); 
} 
+0

,我调试这个盒子是应该处理在同一时间多个请求生产箱。使用eclipse远程调试时,当我把调试点,并打它10次。现在我的要求是停止所有请求并释放流量,所有请求都应该同时进行。但在我的情况下,即使我打了10次服务器,我也只能一个接一个流。 – sourabh 2012-07-25 13:17:39