Discuss / Java / 请教廖学长一个小问题

请教廖学长一个小问题

Topic source

Sense菜

#1 Created at ... [Delete] [Delete and Lock User]

getTask中把while改成if后,几乎每次运行,所有的任务都被线程数组ts中最后一个线程(也就是Thread-4)独占,有极少情况是Thread-3独占,请问这是线程创建时分配了默认的优先级吗?为什么其他0、1、2号线程根本抢不到?

感谢解答

while改为if后,会报Exception in thread "Thread-2" Exception in thread "Thread-3" Exception in thread "Thread-4" Exception in thread "Thread-0" java.util.NoSuchElementException,这四个线程会因为异常而被杀死,最后只剩下一个线程工作。

🌙

#3 Created at ... [Delete] [Delete and Lock User]

循环1000次

10次太少了

如果是用while作判断,每次wait被notify唤醒后,会继续循环,判断当前队列是否为空,而if做判断时,如果wait被唤醒,此时if已经被判断过了,就会直接继续执行后面的代码,获取队列元素,此时如果队列元素为空(因为是一口气唤醒所有进程,你无法保证现在这个进程执行的时候,队列还有没有东西),那么该线程就报nosuchelement exception。

Joker.fu_95

#5 Created at ... [Delete] [Delete and Lock User]

如果是if,所有线程都在wait,当唤醒后,首先获取锁的线程继续执行后面的return,下个线程获取锁也继续执行后面的return,但当队列为空就会出现异常


  • 1

Reply