condition的await流程顺序的问题

![![图片说明](https://img-ask.csdn.net/upload/201706/20/1497922293_514834.jpg)图片说明](https://img-ask.csdn.net/upload/201706/20/1497922284_891927.jpg)图片说明

为什么我的await的执行在system.out前调用会出现这种问题

图片说明

图片说明

await会释放锁,然后阻塞等待,直到信号被唤醒

但是在数组满了后,put线程调用了await,之后怎么调用了take方法的while(count == 0),明明count==3

take先拿到锁,这时候count=0,然后释放锁并且wait,这时候put拿到锁,操作之后通知其他线程醒来,但是take醒来了还要拿到锁才可以,这时候put完工了count=3,并且释放锁,take终于等到锁了,然后打印一句:xxx被阻塞,实际上阻塞是之前的事了,现在拿到锁了这时候在循环内部,实际上count已经是3了,你可以打印一下count看看。