代码如下:public class TestYield extends Thread
{
public TestYield()
{
}
public TestYield(String name)
{
super(name);
}
//定义run方法作为线程执行体
public void run()
{
for (int i = 0; i < 50 ; i++ )
{
System.out.println(getName() + " " + i);
//当i等于20时,使用yield方法让当前线程让步
if (i == 20)
{
Thread.yield();
}
}
}
public static void main(String[] args) throws Exception
{
//启动两条并发线程
TestYield ty1 = new TestYield("高级");
//将ty1线程设置成最高优先级
ty1.setPriority(Thread.MAX_PRIORITY);
ty1.start(); TestYield ty2 = new TestYield("低级");
//将ty1线程设置成最低优先级
ty2.setPriority(Thread.MIN_PRIORITY);
ty2.start();
}
}运行结果如下:高级 0
高级 1
高级 2
高级 3
高级 4
高级 5
高级 6
高级 7
高级 8
高级 9
高级 10
高级 11
高级 12
高级 13
高级 14
高级 15
高级 16
高级 17
高级 18
高级 19
高级 20
低级 0
低级 1
低级 2
高级 21
高级 22
高级 23
高级 24
高级 25
高级 26
高级 27
高级 28
高级 29
高级 30
高级 31
高级 32
高级 33
高级 34
高级 35
高级 36
高级 37
高级 38
高级 39
高级 40
高级 41
高级 42
高级 43
高级 44
高级 45
高级 46
高级 47
高级 48
高级 49
低级 3
低级 4
低级 5
低级 6
低级 7
低级 8
低级 9
低级 10
低级 11
低级 12
低级 13
低级 14
低级 15
低级 16
低级 17
低级 18
低级 19
低级 20
低级 21
低级 22
低级 23
低级 24
低级 25
低级 26
低级 27
低级 28
低级 29
低级 30
低级 31
低级 32
低级 33
低级 34
低级 35
低级 36
低级 37
低级 38
低级 39
低级 40
低级 41
低级 42
低级 43
低级 44
低级 45
低级 46
低级 47
低级 48
低级 49
我的疑问是:为什么优先级高的执行到yield()方法之后,反而将cpu让给了低优先级的,按照yield的规则,不是只能让给比自己高优先级或同级的线程吗?
请高手指点一下。
{
public TestYield()
{
}
public TestYield(String name)
{
super(name);
}
//定义run方法作为线程执行体
public void run()
{
for (int i = 0; i < 50 ; i++ )
{
System.out.println(getName() + " " + i);
//当i等于20时,使用yield方法让当前线程让步
if (i == 20)
{
Thread.yield();
}
}
}
public static void main(String[] args) throws Exception
{
//启动两条并发线程
TestYield ty1 = new TestYield("高级");
//将ty1线程设置成最高优先级
ty1.setPriority(Thread.MAX_PRIORITY);
ty1.start(); TestYield ty2 = new TestYield("低级");
//将ty1线程设置成最低优先级
ty2.setPriority(Thread.MIN_PRIORITY);
ty2.start();
}
}运行结果如下:高级 0
高级 1
高级 2
高级 3
高级 4
高级 5
高级 6
高级 7
高级 8
高级 9
高级 10
高级 11
高级 12
高级 13
高级 14
高级 15
高级 16
高级 17
高级 18
高级 19
高级 20
低级 0
低级 1
低级 2
高级 21
高级 22
高级 23
高级 24
高级 25
高级 26
高级 27
高级 28
高级 29
高级 30
高级 31
高级 32
高级 33
高级 34
高级 35
高级 36
高级 37
高级 38
高级 39
高级 40
高级 41
高级 42
高级 43
高级 44
高级 45
高级 46
高级 47
高级 48
高级 49
低级 3
低级 4
低级 5
低级 6
低级 7
低级 8
低级 9
低级 10
低级 11
低级 12
低级 13
低级 14
低级 15
低级 16
低级 17
低级 18
低级 19
低级 20
低级 21
低级 22
低级 23
低级 24
低级 25
低级 26
低级 27
低级 28
低级 29
低级 30
低级 31
低级 32
低级 33
低级 34
低级 35
低级 36
低级 37
低级 38
低级 39
低级 40
低级 41
低级 42
低级 43
低级 44
低级 45
低级 46
低级 47
低级 48
低级 49
我的疑问是:为什么优先级高的执行到yield()方法之后,反而将cpu让给了低优先级的,按照yield的规则,不是只能让给比自己高优先级或同级的线程吗?
请高手指点一下。
解决方案 »
- 一表格中含有迭代若干个checkbox 如何点击删除将所有checked传入action
- 新手提问:axis2 客户端如何调用服务端的webservice
- JAVA基础
- 求助有关java Pet Store...
- ssh 实现图片的存储
- 升级JDK会不会对原有系统造成影响?
- jb2005中配置weblogic8的启动参数
- hibernate hbm异常An association from the table refers to an unmapped class
- 如何在一个java应用程序中支持多个摄像头????????
- 关于Tomcat与Apache的集成的配置问题?
- 求反斜杠的正则表达式
- struts2 防重复提交问题?
你的程序总共就只有2个线程,高级的那个让出了cpu,当然是低级的上咯。