是不是可以用两个if代替while,保证可以remove
Topic source不行,首先你第二个if逻辑是错的,忘了取反,
但第二个 if 改为 if(!queue.isEmpth()) 后也不行,
如果多个读取线程调用getTask()方法,进入等待状态,
这时addTask()里使用的是notifyAll()而不是notify(),就会出现问题
只有一个读取线程可以正常执行,另外的几个都会返回null,线程结束,不符合案例需要,案例需要的是如果队列为空,则等待不为空时取数据返回
肯定,不可以
该线程执行queue.remove()可以获取到队列的元素,然而,剩下的线程如果获取this锁后执行queue.remove(),此刻队列可能已经没有任何元素了
主要原因是,空队列调用remove()方法会报:NoSuchElementException
- 1
PBC