java有关线程问题(jdk1.6)

来源:百度知道 编辑:UC知道 时间:2024/07/04 22:53:45
我设置第一个线程优先级最高,为什么还会被抢占线程?
源代码如下:

public class Test3 {

public static void main(String[] args) {
XianCheng1 xianCheng1=new XianCheng1();
XianCheng2 xianCheng2=new XianCheng2();
xianCheng1.start();
xianCheng1.setPriority(Thread.MAX_PRIORITY);
xianCheng2.start();
}

}

class XianCheng1 extends Thread{
public void run(){
for(int i=0;i<10;i++){
System.out.println(i);
}
}
}

class XianCheng2 extends Thread{
public void run(){
for(int i=0;i<10;i++){
System.out.println("这个数字是:" + i);
}
}
}
运行会得到如下结果:
(注:出现这种情况几率很小)

线程是随机系统分配的,即使是优先级高,只是获得的概率高,如果不想交叉出现的话,就用线程同步吧:
public class Test3 {
XianCheng2 xianCheng2;
XianCheng1 xianCheng1;
public Test3()
{
xianCheng1=new XianCheng1();
xianCheng1.setPriority(Thread.MAX_PRIORITY);
xianCheng2=new XianCheng2();
xianCheng1.start();
xianCheng2.start();
}
public static void main(String[] args) {
new Test3();
}

private synchronized void PrintOut() //线程同步
{
if(Thread.currentThread()==xianCheng1)
{
for(int i=0;i<10;i++){
System.out.println(i);
}
}
else
{
for(int i=0;i<10;i++){
System.out.println("这个数字是:" + i);
}
}
}
class XianCheng1 extends Thread{
public void run() {
PrintOut();
}
}

class XianCheng2 extends Thread{
public void run(){
PrintOut();
}
}
}

1