本帖最后由 HM李超 于 2013-4-16 09:34 编辑
示例程序:- class TestYield extends Thread
- {
- public TestYield()
- {
-
- }
- public TestYield(String name)
- {
- super(name);
- }
- public void run()
- {
- for(int i=0;i<50;i++)
- {
- System.out.println(getName()+" "+i);
- if(i==20)
- Thread.yield(); //使用yield方法让当前线程让步
- }
- }
- public static void main(String[] args)
- {
- //启动两条并发线程
- TestYield ty1=new TestYield("高级");
- ty1.setPriority(Thread.MAX_PRIORITY); //将ty1设置成最高优先级
- ty1.start();
- TestYield ty2=new TestYield("低级"); //将ty2设置成最低优先级
- ty2.setPriority(Thread.MIN_PRIORITY);
- ty2.start();
- }
- }
复制代码 结果:
i
问题:我们知道当某个线程调用了yield方法暂停后,只有优先级与当前线程相同或更高的就绪状态的线程才可以得到运行的机会。
如程序分别ty1的优先级为最高级和ty2为优先级最低级,按理应该是ty2运行20次后,调用了yield方法暂停,但ty1的优先级最高,ty1这条线程应该继续执行,
得到的结果应该是:低级20-->高级n-->高级n+1-->高级n+2-->高级...-->高级50-->低级21-->低级...-->低级50
为什么我的程序运行结果出现了如图所示的情况?怎么优先级低的线程被暂时后,还是跟优先级高级的线程同时执行了?
|