mrrao

Results 3 comments of mrrao

lock.wait必须在while(check)循环里使用,这个你可以查看下Object#wait方法里的注释。如果不加循环检测,最大的问题是lock.wait可能会虚假唤醒,就是说在没有得到notify/notifyAll的时候也可能会醒过来,可以参考https://en.wikipedia.org/wiki/Spurious_wakeup#Spurious_wakeup_in_Linux

这块意外唤醒后具体的处理逻辑是什么呢? 不是所有的wait都必须在循环中使用,需要看实际的使用场景。这个能否展开说明下,谢谢。

https://github.com/weibocom/motan/blob/ed0095dd65660f4464dff987202d462710c3972f/motan-core/src/main/java/com/weibo/api/motan/rpc/DefaultResponseFuture.java#L84-L93 意外唤醒并不会触发cancel操作,因为意外唤醒并不是说要抛异常。 关于wait是否必须在循环中,这个在Object#wait注释里面明确的指出必须在循环中使用: https://github.com/ZenOfAutumn/jdk8/blob/de6c37469e54d46841838423400144f7b9dc4cf1/java/lang/Object.java#L477-L485 我觉得这种核心代码每次rpc请求都会用到,所以无论再怎么考虑正确性都不为过。