【问题标题】:Remote debugging in eclipse in multithreaded environment多线程环境下eclipse远程调试
【发布时间】:2012-07-25 07:08:14
【问题描述】:

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

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

任何帮助将不胜感激。

苏拉布

【问题讨论】:

    标签: eclipse multithreading


    【解决方案1】:

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

    【讨论】:

    • 我正在调试的盒子是生产盒子,它应该同时处理多个请求。在使用 eclipse 远程调试它时,当我放置调试点并点击它 10 次时。现在我的要求是在那一点停止所有请求并在释放流时,所有请求都应该同时进行。但在我的情况下,即使它击中服务器 10 次,我也只能一一获得流量。
    猜你喜欢
    • 2010-12-20
    • 1970-01-01
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 1970-01-01
    • 1970-01-01
    • 2011-06-13
    相关资源
    最近更新 更多