public class Priorty {
static class MyThread extends Thread{
private int ID=0;
public MyThread(int id){
this.ID=id;
}
public void run(){
System.out.println("MyThread-"+this.ID+" begin! Priorty: "+this.getPriority());
System.out.println("MyThread-"+this.ID+" end");
}
}
public static void main(String []args){
MyThread[] myThreads=new MyThread[3];
for(int i=0;i<3;i++){
myThreads[i]=new MyThread(i+1);
myThreads[i].setPriority(i*3+1);
}
for(int i=0;i<3;i++){
myThreads[i].start();
}
}
}
启动3个线程,分别将优先级设为1,4,7.目的是先调用按优先级的高低输出,但是虚拟机的输出结果是随机的,请问用什么方法,能按规定优先级的高低调用?
//运行结果:
MyThread-2 begin! Priorty: 4
MyThread-3 begin! Priorty: 7
MyThread-1 begin! Priorty: 1
MyThread-2 end
MyThread-3 end
MyThread-1 end
//--------------
MyThread-1 begin! Priorty: 1
MyThread-2 begin! Priorty: 4
MyThread-1 end
MyThread-3 begin! Priorty: 7
MyThread-3 end
MyThread-2 end
//--------------
MyThread-1 begin! Priorty: 1
MyThread-1 end
MyThread-3 begin! Priorty: 7
MyThread-3 end
MyThread-2 begin! Priorty: 4
MyThread-2 end
//--------------
MyThread-3 begin! Priorty: 7
MyThread-3 end
MyThread-2 begin! Priorty: 4
MyThread-2 end
MyThread-1 begin! Priorty: 1
MyThread-1 end
13 个解决方案
#1
在这段代码加一句话如何:
每次启动一个线程后,当前线程休眠10毫秒,以确保它已经开始。
for(int i=0;i<3;i++){
myThreads[i].start();
Tread.sleep(10);
}
每次启动一个线程后,当前线程休眠10毫秒,以确保它已经开始。
#2
如果你去把操作系统原理那本书看一下,或许对你有点帮助。
#3
如果你是给我个建议我谢谢你,但是如果在对方有疑问的时候用这种方式回答你觉得合适吗?
最起码要尊重发帖人,来CSDN的都是为了学习,碰到问题了,向大伙请教一下,一起解决,或许也是你不会或者是你没遇到的问题。
如果你要是把所有计算机的书都看完并且精通了那你来CSDN有什么意义?难道就是为了让别人看你打那几个破字?
-----------------------做人厚道些好!!!
以上个人观点,仅对此人回答强烈不满!
#4
可能没问清楚
目的是为了测试优先级,用不sleep方法是为了证明多个同时启动的线程,大多数情况下优先级高的先运行,完全取决于java虚拟机的调度。
#5
OS只是保证了优先级高的线程会被优先执行..但是不是一定先执行.
在JVM的调度算法中也是如此.
在JVM的调度算法中也是如此.
#6
优先级只能保证在同一时抢占的线程,优先级高的先占用,
只是这段代码运行太快了,根本就不是同一时刻的,前一个线程早运行完了~
加了Thread.sleep()也没用
只是这段代码运行太快了,根本就不是同一时刻的,前一个线程早运行完了~
加了Thread.sleep()也没用
#7
不懂,求解!
#8
不同平台下,线程调度算法不一样
#9
ding
#10
这个就像生男生女,无法控制一样。
#11
MyThread-3 begin! Priorty: 7
MyThread-3 end
MyThread-2 begin! Priorty: 4
MyThread-2 end
MyThread-1 begin! Priorty: 1
MyThread-1 end
我的CP上每次运行都是这个..........
MyThread-3 end
MyThread-2 begin! Priorty: 4
MyThread-2 end
MyThread-1 begin! Priorty: 1
MyThread-1 end
我的CP上每次运行都是这个..........
#12
5楼讲的是对的,优先级只针对争抢资源的情况。要不然有个优先级是最高的 他什么都不干,
后面的一直等待,这样不好吧。11楼估计是cpu太差了
后面的一直等待,这样不好吧。11楼估计是cpu太差了
#13
我只是给你一个建议,如果你要把多线程这一块搞好,而且工作之后能让别人愿意相信你的实力,愿意让你写这一块的代码。那么就按我说的做。你可能还没有工作或者还没有碰到这样的事情,不过以后你会碰到的。如果技术不能用到产品上,学技术还有什么用。再次重复一遍,只是建议,做不做是你自己的事情。我很少给别人回帖,因为出力不讨好的事情有点气人。
#1
在这段代码加一句话如何:
每次启动一个线程后,当前线程休眠10毫秒,以确保它已经开始。
for(int i=0;i<3;i++){
myThreads[i].start();
Tread.sleep(10);
}
每次启动一个线程后,当前线程休眠10毫秒,以确保它已经开始。
#2
如果你去把操作系统原理那本书看一下,或许对你有点帮助。
#3
如果你是给我个建议我谢谢你,但是如果在对方有疑问的时候用这种方式回答你觉得合适吗?
最起码要尊重发帖人,来CSDN的都是为了学习,碰到问题了,向大伙请教一下,一起解决,或许也是你不会或者是你没遇到的问题。
如果你要是把所有计算机的书都看完并且精通了那你来CSDN有什么意义?难道就是为了让别人看你打那几个破字?
-----------------------做人厚道些好!!!
以上个人观点,仅对此人回答强烈不满!
#4
可能没问清楚
目的是为了测试优先级,用不sleep方法是为了证明多个同时启动的线程,大多数情况下优先级高的先运行,完全取决于java虚拟机的调度。
#5
OS只是保证了优先级高的线程会被优先执行..但是不是一定先执行.
在JVM的调度算法中也是如此.
在JVM的调度算法中也是如此.
#6
优先级只能保证在同一时抢占的线程,优先级高的先占用,
只是这段代码运行太快了,根本就不是同一时刻的,前一个线程早运行完了~
加了Thread.sleep()也没用
只是这段代码运行太快了,根本就不是同一时刻的,前一个线程早运行完了~
加了Thread.sleep()也没用
#7
不懂,求解!
#8
不同平台下,线程调度算法不一样
#9
ding
#10
这个就像生男生女,无法控制一样。
#11
MyThread-3 begin! Priorty: 7
MyThread-3 end
MyThread-2 begin! Priorty: 4
MyThread-2 end
MyThread-1 begin! Priorty: 1
MyThread-1 end
我的CP上每次运行都是这个..........
MyThread-3 end
MyThread-2 begin! Priorty: 4
MyThread-2 end
MyThread-1 begin! Priorty: 1
MyThread-1 end
我的CP上每次运行都是这个..........
#12
5楼讲的是对的,优先级只针对争抢资源的情况。要不然有个优先级是最高的 他什么都不干,
后面的一直等待,这样不好吧。11楼估计是cpu太差了
后面的一直等待,这样不好吧。11楼估计是cpu太差了
#13
我只是给你一个建议,如果你要把多线程这一块搞好,而且工作之后能让别人愿意相信你的实力,愿意让你写这一块的代码。那么就按我说的做。你可能还没有工作或者还没有碰到这样的事情,不过以后你会碰到的。如果技术不能用到产品上,学技术还有什么用。再次重复一遍,只是建议,做不做是你自己的事情。我很少给别人回帖,因为出力不讨好的事情有点气人。