Discuss / Java / 使用if和while的区别

使用if和while的区别

Topic source

if 语句在判断条件为真后,执行其内部的代码块,并在执行完后立即跳出,不再进行额外的条件判断。

而 while 语句在判断条件为真后,同样会执行其内部的代码块,然后会再次进行条件判断,只有在条件为假时才会跳出循环。

在等待线程被 notifyAll 唤醒后,所有线程都会从 wait() 处返回,即等待状态结束,这时语句内部的代码块已经执行完毕。但在竞争获取锁的情况下,只有其中一个线程能够先获得锁并执行后续的代码。

如果使用 if 语句,随后其他线程获得锁后也会直接执行后续的代码,而不会再重新判断条件。

相比之下,如果使用 while 语句,其他线程获得锁后会再次判断条件,如果条件不满足,它们会再次进入等待状态,以确保只有在条件满足时才会执行后续的代码。

langxc

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

唤醒之后,没有获取到锁的线程,是什么状态?按理说唤醒之后已经结束等待状态了,争取锁失败之后继续等待状态?

那年别愁

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

唤醒之后去检查queue是否为空,谁先醒的谁就先拿到锁,然后不为空执行到return方法,释放锁,其他等待的线程开始竞争获取这个锁在检查queue是否为空,为空陷入休眠,等待下一次唤醒


  • 1

Reply