yield
yield方法是Thread方法,该方法会使得当前线程由运行态变为阻塞态,其他的相同优先级的线程就由获得cpu的执行权,该线程也会竞争cpu执行权。该方法不是对象的方法,他不会释放对象的锁。
不释放锁的例子
package javalearn.javabase.thread.yield;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class YieldLockTest {
private static Object object =new Object();
private static int runsize=20;
public static void main(String[] args) {
Thread t1=new ThreadOne("t1");
Thread t2=new ThreadOne("t2");
t1.start();
t2.start();
}
static class ThreadOne extends Thread{
public ThreadOne(String name)
{
super(name);
}
@Override
public void run(){
synchronized (object)
{
int i=0;
while(i<runsize){
log.info("cunrrent thread is {}, priority {}",Thread.currentThread().getName(),
Thread.currentThread().getPriority());
if(i%4==0){
Thread.yield();
}
i++;
}
}
}
}
}
测试说明
对同一对象的两个线程,执行Thread.yield方法不会释放锁。
结果
```22:52:26.550 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.556 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.557 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.558 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.558 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.558 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.558 [t1] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t1, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.558 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.559 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.559 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.559 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.559 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.559 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.559 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.559 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5
22:52:26.559 [t2] INFO javalearn.javabase.thread.yield.YieldLockTest - cunrrent thread is t2, priority 5