我有一个我想测试的执行器服务。
我需要调用的任务(Runnables)很少,然后在几秒钟后调用 wait(),虚拟计时器调用 notify()。
我已做过这件事来检查所有任务是否按顺序执行并在一段时间后执行。
问题是我的Runnable的 run()方法根本没有被调用。我设置了一个断点,代码执行无法到达。
在普通编码中它运作良好。任务排队,他们调用 wait()直到没有获得某些响应或触发超时,他们调用 notify()并执行下一个任务。
问题出在我运行测试时。
有没有想过这个?
答案 0 :(得分:0)
当typedef unsigned long int lint;
lint fastpow(lint nBase, lint nExp, lint nMod) {
int lastTrueBit = 0;
unsigned long long int resPow = 1ULL;
unsigned long long int curPow = nBase;
for (int i = 0; i < 32; i++) {
int currentBit = getBit(nExp, i);
if (currentBit == 1) {
for (lint j = 0; j < i - lastTrueBit; j++) {
curPow = curPow * curPow;
}
resPow =resPow * curPow;
lastTrueBit = i;
}
}
return resPow % nMod;
}
方法在其他线程点击test
和wait
之前退出时,可能会发生这种情况。
尝试通话:
notify
退出executorService.shutdown();
try {
executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
}
方法之前。它将阻止测试方法,直到所有test
完成。