Thread.yield();
Sun api 明确指出 “暂停当前正在执行的线程对象,并执行其他线程。 ”
所以yield()是让当前线程暂停(由于没有说明执行其他线程的时间,很有可能,执行了其他同优先级的线程后马上又回到该线程了。),以便让具有相同优先级的线程进入执行状态,但不是绝对的。因为虚拟机可能会让该线程重新进入执行状态。
“比如说说,没有yield()的情况下,一个线程在pop,有可能另外一个线程对它造成什么样的不同步?”
那要看另一个线程的代码了,如果另一个线程和pop是同步的,那么用了yield另一个线程执行完后才执行point--;return goods;不用如果另一个线程用到了point,他的值可能已经是自减也可能是没自减的。。。 |
|