如何计划程序忽略时间等待其他线程

时间:2015-02-23 14:52:35

标签: 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的秒表或类似物)。当连续运行时,我按预期得到15秒和12秒。 但是,当并行运行时,我会得到例如程序B花费时间等待锁定程序C的15s和22s。

有没有办法忽视以这种方式阻止的时间花费并获得与串行运行时相同的时间?更有帮助的是细分,例如“B计划花了22s,其中10s在其他线程上被阻止了”

1 个答案:

答案 0 :(得分:-1)

如果您想在线程级别监控此问题,可以致电getState() Thread个对象,查看每个ThreadBLOCKED {{1}的时长与state状态相比。