object.wait会导致死锁吗?不会, Java Object锁本身还是偏重的操作. 没有CAS这种原子操作轻量.
或者不会从睡眠中醒来? 2018-06-11 15:28 GMT+08:00 卢松 <lusong19860...@gmail.com>: > 你好,zhanhui, > > 我说的不同不是AtomicBoolean那块,如下: > > apache版本使用的是这个对象 CountDownLatch2 waitPoint = new CountDownLatch2(1); > 做的wait操作。 > > 而alibaba版本使用的object的wait操作, > > 这两种实现有什么区别? > object.wait会导致死锁吗?或者不会从睡眠中醒来? > > > Thanks > 卢松 > > > Zhanhui Li <lizhan...@gmail.com> 于2018年6月11日周一 上午10:04写道: > > > > 主要是缩小了锁的粒度. pls, 原子变量比对象锁效率好一点. > > > > > 在 2018年6月10日,下午3:25,卢松 <lusong19860...@gmail.com> 写道: > > > > > > 各位大佬好。 > > > 有个疑问,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 > > >