yield方法会让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁。但是yield不能控制具体的交出CPU的时间, 另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。 注意,调用yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态, 它只需要等待重新获取CPU执行时间,这一点是和sleep方法不一样的。具体请参照一下实例:
public class TestYield {
private int i = 10;
private Object object = new Object();
public static void main(String[] args) throws Exception {
TestYield test = new TestYield();
MyThread thread1 = test.new MyThread();
MyThread thread2 = test.new MyThread();
thread1.start();
thread2.start();
}
class MyThread extends Thread{
@Override
public void run() {
synchronized (object) {
i++;
System.out.println("i:"+i);
try {
System.out.println("线程"+Thread.currentThread().getName()+"进入就绪状态");
Thread.currentThread().yield();
System.out.println("线程"+Thread.currentThread().getName()+"就绪结束,已获得cpu可以继续执行");
} catch (Exception e) {
// TODO: handle exception
}
i++;
System.out.println("i:"+i);
}
}
}
}输出结果:
i:11
线程Thread-0进入就绪状态
线程Thread-0就绪结束,已获得cpu可以继续执行
i:12
i:13
线程Thread-1进入就绪状态
线程Thread-1就绪结束,已获得cpu可以继续执行
i:14
本文探讨了Java中的yield方法,该方法用于让当前线程自愿放弃CPU执行权,给相同优先级的线程提供执行机会。尽管它不保证具体何时交出控制权,且不会使线程进入阻塞状态,只重回就绪状态,不同于sleep方法。通过示例展示了yield方法的使用和线程状态的变化。
1120

被折叠的 条评论
为什么被折叠?



