[ISSUE #191] VariableLinkedBlockingQueue的take、poll方法优化#430
Open
xingyiteng wants to merge 2 commits intodromara:masterfrom
Open
[ISSUE #191] VariableLinkedBlockingQueue的take、poll方法优化#430xingyiteng wants to merge 2 commits intodromara:masterfrom
xingyiteng wants to merge 2 commits intodromara:masterfrom
Conversation
fix:VariableLinkedBlockingQueue的take、poll方法优化
Collaborator
如果c > capacity的时候signal not full确实有点不合理 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
issue:#191 VariableLinkedBlockingQueue中的take、poll方法优化
原VariableLinkedBlockingQueue中take、poll方法代码:
修改后take、poll方法代码:
原因:
c的含义是:在取出元素之前队列中的元素数量。参考代码:c = count.getAndDecrement();c == capacity的含义是:如果取出元素之前,元素数量等于队列容量,那么在取出元素之后会有一个空位,则可以通知等待put操作的线程插入元素。c > capacity的含义是:如果取出元素之前,元素数量大于队列容量,那么在取出元素之后依然没有空位,如果此时通知等待put操作的线程,则put操作依然失败。参考代码:while (count.get() >= capacity) {notFull.await();}优化: