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

Reply via email to