程序如下:
public class ThreadTest{ public static void main(String[] a){
ThreadClass t1 = new ThreadClass("T1");
ThreadClass t2 = new ThreadClass("T2");
//t1.setPriority(10);
//t2.setPriority(10);
t1.start(); t2.start();
}
}class ThreadClass extends Thread{
String msg ;
public ThreadClass(String str){
msg = str;
}
public void run(){
for(int i=0;i<20;i++){
System.out.println(msg+":"+getPriority()+":"+i);
}
}
}
执行结果如下,即两个线程(优先级都是默认的5)是交错执行的,可以认为操作系统采用的是时间片方式的线程切换。
T1:5:0
T1:5:1
T1:5:2
T1:5:3
T1:5:4
T2:5:0 //此处可见是交互执行的
T2:5:1
T2:5:2
T2:5:3
T1:5:5 //此处可见是交互执行的
T1:5:6
T1:5:7
T1:5:8
...
T2:10:19
T2:10:0
T2:10:1
T2:10:2
...
T1:10:18
T1:10:19
T2:10:18
T2:10:19但是若将程序中的注释去掉,即将两个线程的优先级都设为10,执行结果却是T2一直要等到T1结束的时候才能得到执行,如下:
T1:10:0
T1:10:1
T1:10:2
...
T1:10:19
T2:10:0 //一直等到T1执行结束,T2才能执行
T2:10:1
T2:10:2
...
T2:10:19按说,上面两次T1和T2的优先级都一样的,为什么执行结果却不一样,望同志们给予解答啊!
public class ThreadTest{ public static void main(String[] a){
ThreadClass t1 = new ThreadClass("T1");
ThreadClass t2 = new ThreadClass("T2");
//t1.setPriority(10);
//t2.setPriority(10);
t1.start(); t2.start();
}
}class ThreadClass extends Thread{
String msg ;
public ThreadClass(String str){
msg = str;
}
public void run(){
for(int i=0;i<20;i++){
System.out.println(msg+":"+getPriority()+":"+i);
}
}
}
执行结果如下,即两个线程(优先级都是默认的5)是交错执行的,可以认为操作系统采用的是时间片方式的线程切换。
T1:5:0
T1:5:1
T1:5:2
T1:5:3
T1:5:4
T2:5:0 //此处可见是交互执行的
T2:5:1
T2:5:2
T2:5:3
T1:5:5 //此处可见是交互执行的
T1:5:6
T1:5:7
T1:5:8
...
T2:10:19
T2:10:0
T2:10:1
T2:10:2
...
T1:10:18
T1:10:19
T2:10:18
T2:10:19但是若将程序中的注释去掉,即将两个线程的优先级都设为10,执行结果却是T2一直要等到T1结束的时候才能得到执行,如下:
T1:10:0
T1:10:1
T1:10:2
...
T1:10:19
T2:10:0 //一直等到T1执行结束,T2才能执行
T2:10:1
T2:10:2
...
T2:10:19按说,上面两次T1和T2的优先级都一样的,为什么执行结果却不一样,望同志们给予解答啊!
两年前就是猩猩了
佩服佩服
程序方面应该是你的机器太快了吧
我调过200是一点问题都没有的
java的线程调度记得好像与os关系特别大
在win下面,好像不能完全控制说的不对的地方请大家指出