各位大佬好。 有个疑问,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