假设我有以下程序:
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在其他线程上被阻止了”