Tag: 产量

方法收益如何运作?

在javadoc中有说yield方法 使当前正在执行的线程对象暂时暂停并允许其他线程执行。 而Katherine Sierra和Bert Bates的SCJP书也说明了这一点 yield()应该做的是使当前正在运行的线程返回runnable以允许具有相同优先级的其他线程轮到他们。 那么实际上方法在做什么?

如果在synchronized方法中调用,thread.yield()是否会丢失对象的锁定?

我理解Thread.currentThread().yield()是线程调度程序的通知,它可以将cpu周期分配给具有相同优先级的其他线程(如果有的话)。 我的问题是:如果当前线程锁定某个对象并调用yield() ,它会立即丢失该锁定吗? 并且当线程调度程序发现没有这样的线程来分配cpu周期时,那么调用yield()的线程将再次在争取锁定它先前丢失的对象? 我在javadoc和论坛中找不到它[http://www.coderanch.com/t/226223/java-programmer-SCJP/certification/does-sleep-yield-release-lock]有50-50个答案。 我认为yield() (比如说thread1)应该释放锁,因为如果某个相同优先级的线程(比如说thread2)想要对同一个对象进行操作,那么当线程调度程序最终将cup分配给thread2时它就有机会。