A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马新乐 黑马帝   /  2011-12-26 02:08  /  1874 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

yield()方法可以暂停指定的一个线程吗?

4 个回复

倒序浏览
曾运 黑马帝 2011-12-26 08:24:03
沙发
yield()方法可以让线程放弃CPU执行权,但是并不释放锁
回复 使用道具 举报
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()方法不会使不同优先级的线程有执行的机会。
回复 使用道具 举报
这个方法是线程方法,当一个线程抢到执行权后,执行到yield()方法后,就会放弃执行权,其他线程就可以拿到执行权了。
回复 使用道具 举报
yield()方法会让当前线程放弃执行权,并不释放锁
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马