我正在使用eclipse进行远程调试。我的要求是同时发出20个请求,使用debug breakpoint在一个点停止,然后同时释放所有挂起的线程,以测试多个线程同时访问代码时代码的行为方式。但是,当我尝试这个时,我发现只有一个线程正在处理所有请求 守护程序线程[http-0.0.0.0-8080-Processor60](暂停(VcsInfoDAO中第440行的断点))
当第一个请求完成时,只有第二个请求进入上面提到的同一个线程所服务的断点。是否有任何设置在eclipse中使所有请求到达单个点然后以某种方式同时释放线程,以便所有线程同时访问代码。
任何帮助都将受到高度赞赏。
Sourabh
答案 0 :(得分:0)
Eclipse与您所看到的无关。如果你设置一个断点到一个应该同时调用的方法中的某个地方,如果你的客户端代码确实启动了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();
}