java线程中的yield()

Python014

java线程中的yield(),第1张

Thread.yield()

Sun

api

明确指出

“暂停当前正在执行的线程对象,并执行其他线程。

所以yield()是让当前线程暂停(由于没有说明执行其他线程的时间,很有可能,执行了其他同优先级的线程后马上又回到该线程了。),以便让具有相同优先级的线程进入执行状态,但不是绝对的。因为虚拟机可能会让该线程重新进入执行状态。

“比如说说,没有yield()的情况下,一个线程在pop,有可能另外一个线程对它造成什么样的不同步?”

那要看你另一个线程的代码了,如果另一个线程和pop是同步的,那么用了yield另一个线程执行完后才执行point--return

goods不用如果另一个线程用到了point,他的值可能已经是自减也可能是没自减的。。。

楼主你错误的理解了yiedld这个方法。

yiedld这个方法是让当前线程回到可执行状态,以便让具有相同优先级的线程进入执行状态,但不是绝对的。因为虚拟机可能会让该线程重新进入执行状态。

让线程暂时停止可以选择sleep方法。比如thread.sleep(1000),当前线程睡眠1秒。需要知道的是,1秒后,线程是回到可执行状态,并不是执行状态,什么时候执行那是由虚拟机来决定的。所以sleep(1000)并不是在睡眠1秒后立即执行。