各位大佬好。
有个疑问,apache版本ServiceThread是这么实现的:
protected final CountDownLatch2 waitPoint = new CountDownLatch2(1);
protected void waitForRunning(long interval) {
if (hasNotified.compareAndSet(true, false)) {
this.onWaitEnd();
return;
}
//entry to wait
waitPoint.reset();
try {
waitPoint.await(interval, TimeUnit.MILLISECONDS);
} catch (InterruptedException e) {
log.error("Interrupted", e);
} finally {
hasNotified.set(false);
this.onWaitEnd();
}
}
而很早以前的alibaba版本是这么实现的,
protected void waitForRunning(long interval) {
synchronized (this) {
if (this.hasNotified) {
this.hasNotified = false;
this.onWaitEnd();
return;
}
try {
this.wait(interval);
} catch (InterruptedException e) {
LOGGER.error(e.getMessage(), e);
} finally {
this.hasNotified = false;
this.onWaitEnd();
}
}
}
请问,这两种实现的主要区别是什么?有什么特殊要考虑的吗?
有wiki说明这个修改吗?
谢谢!
卢松
best regards