java - 如何计算忽略等待其他线程的时间的程序

标签 java multithreading timing

假设我有以下程序:

public class ProgramA {
  public void doSomething(ProgramC c) {
    c.doSomething();
    // Do something else that takes 5 seconds.
  }
}

public class ProgramB {
  public void doSomething(ProgramC c) {
    c.doSomething();
    // Do something else that takes 2 seconds.
  }
}

public class ProgramC {
  public synchronized void doSomething() {
    // Do something that takes 10 seconds
  }
}

我想给程序 A 和程序 B 计时,看看它们用了多长时间(使用 Guava 的秒表或类似工具)。串行运行时,我得到了预期的 15s 和 12s。 但是,当并行运行时,我得到例如15s和22s因为程序B花时间等待程序C的锁。

有没有办法忽略以这种方式阻塞的时间并获得与串行运行时相同的时间?更有帮助的是分割,例如“程序 B 耗时 22 秒,其中 10 秒阻塞在其他线程上”

最佳答案

如果你想在线程级别监控它,你可以调用 getState() Thread 对象,与 RUNNABLE 相比,查看每个 Thread 有多长时间处于 BLOCKED state 状态。

关于java - 如何计算忽略等待其他线程的时间的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676466/

相关文章:

java - 屏幕旋转后恢复 fragment 中微调器的位置

java - Android获取当前东部标准时间

java - 使用 AffineTransform 从四边形变换为四边形?

c# - 多线程时循环索引超出范围 ArgumentOutOfRangeException

java - 如何为实体创建单独的项目?

c# - 哪些特性使类成为线程安全的?

c# - 我应该为此使用 BackgroundWorker 还是 Threads?

c - 不同算子的执行时间

ruby-on-rails - Rspec 测试需要 sleep 才能工作

function - SDL_GetTicks() 定义缺失。 (SDL 2.0.3)