黑马程序员技术交流社区

标题: yield [打印本页]

作者: 马新乐    时间: 2011-12-26 02:08
标题: yield
yield()方法可以暂停指定的一个线程吗?
作者: 曾运    时间: 2011-12-26 08:24
yield()方法可以让线程放弃CPU执行权,但是并不释放锁
作者: 王胜利    时间: 2011-12-26 08:31
yield() 方法:yield() 使得线程放弃当前分得的 CPU 时间,但是不使线程阻塞,即线程仍处于可执行状态,随时可能再次分得 CPU 时间。调用 yield() 的效果等价于调度程序认为该线程已执行了足够的时间从而转到另一个线程。
yield()方法与sleep()方法相似,只是它不能由用户指定线程暂停多长时间。yield()方法只能使同优先级的线程有执行的机会。
public class ThreadTest implements Runnable
{
public void run()
{ for(int k=0;k<10;k++)
{
if(k == 5 && Thread.currentThread().getName().equals("t1"))
{
Thread.yield();
}
System.out.println(Thread.currentThread().getName()
+ " : " + k);
}
}
public static void main(String[] args)
{
Runnable r = new ThreadTest();
Thread t1 = new Thread(r,"t1");
Thread t2 = new Thread(r,"t2");
t1.setPriority(Thread.MAX_PRIORITY);
t2.setPriority(Thread.MIN_PRIORITY);
t1.start();
t2.start();
}
}
输出结果:
t1 : 0
t1 : 1
t1 : 2
t1 : 3
t1 : 4
t1 : 5
t1 : 6
t1 : 7
t1 : 8
t1 : 9
t2 : 0
t2 : 1
t2 : 2
t2 : 3
t2 : 4
t2 : 5
t2 : 6
t2 : 7
t2 : 8
t2 : 9
多次运行这个程序,输出也是一样。这说明:yield()方法不会使不同优先级的线程有执行的机会。

作者: 常兆鹏    时间: 2011-12-26 08:36
这个方法是线程方法,当一个线程抢到执行权后,执行到yield()方法后,就会放弃执行权,其他线程就可以拿到执行权了。
作者: 刘小峰    时间: 2011-12-26 21:11
yield()方法会让当前线程放弃执行权,并不释放锁




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2