已有101人关注
关于JAVA
发表在Java图书答疑 2015-08-09
是否精华
版块置顶:
public class SimplePriorities extends Thread{
public SimplePriorities(int priority,String name){
setPriority(priority);
setName(name);
start();
}
public String toString(){
return super.toString()+":"+getName();
}
public void run(){
int countdown=3;
while(true){
System.out.println(this);
if(--countdown==0){
return;
}
}
}
public static void main(String[] args){
for(int i=0;i<5;i++){
if(i==3){
new SimplePriorities(Thread.MAX_PRIORITY, "最高优先级线程-"+i);
continue;
}
new SimplePriorities(Thread.NORM_PRIORITY, "低优先级线程-"+i);
}
new SimplePriorities(8, "高优先级线程");
}
}
代码如上。
(1)这个代码暴露了我对super和this关键字的不理解。能不能详细的帮我解释一遍?(比如这边的super调用的是什么?为什么要用super?还有this怎么调用答应对象的?)(最好能帮我把super和this所有的作用能讲一遍,最好有实例)。谢谢。
(2)我看了这个代码的运行结果。
Thread[低优先级线程-0,5,main]:低优先级线程-0         
Thread[低优先级线程-0,5,main]:低优先级线程-0
Thread[最高优先级线程-3,10,main]:最高优先级线程-3
Thread[最高优先级线程-3,10,main]:最高优先级线程-3
Thread[低优先级线程-2,5,main]:低优先级线程-2
Thread[低优先级线程-1,5,main]:低优先级线程-1
Thread[高优先级线程,8,main]:高优先级线程
Thread[低优先级线程-2,5,main]:低优先级线程-2
Thread[最高优先级线程-3,10,main]:最高优先级线程-3
Thread[低优先级线程-0,5,main]:低优先级线程-0
Thread[低优先级线程-4,5,main]:低优先级线程-4
Thread[低优先级线程-2,5,main]:低优先级线程-2
Thread[高优先级线程,8,main]:高优先级线程
Thread[低优先级线程-1,5,main]:低优先级线程-1
Thread[高优先级线程,8,main]:高优先级线程
Thread[低优先级线程-4,5,main]:低优先级线程-4
Thread[低优先级线程-1,5,main]:低优先级线程-1
Thread[低优先级线程-4,5,main]:低优先级线程-4
我很不明白。我知道这边的调用start()方法后,start方法高速系统可以启动run就返回,这样的话应该是打印三次Thread[低优先级线程-0,5,main]:低优先级线程-0 (定义了countdown==3)然后返回继续执行main函数的for循环(i==1时候)然后还是会执行new SimplePriorities(Thread.NORM_PRIORITY, "低优先级线程-"+i);这条语句。继续调用start(),启用run()方法,打印完三次Thread[低优先级线程-1,5,main]:低优先级线程-1再继续for循环......这是我的理解之一。
或者是系统调用start()方法后,start方法高速系统可以启动run就返回,执行for循环(此时已经打印了一次Thread[低优先级线程-0,5,main]),执行for循环就会出现Thread[低优先级线程-1,5,main],然后start方法高速系统可以启动run就返回(执行新的run()之前的线程被挂起),执行for循环(此时已经打印了一次Thread[低优先级线程-1,5,main])...如此往复。
但结果和我想的这两种都不一样,能不能解释一下他执行的步骤,并帮我解释一下。麻烦啦,万分感谢!!!
分享到:
精彩评论 1
菜鸟级精英
学分:0 LV1
TA的每日心情
开心
2020-03-23 21:05:48
2015-08-10
沙发
其实你要是多运行几次这个代码,你会发现每一次运行的结果都不相同。这个代码主要说明的问题是,高优先级的线程会先于低优先级的线程运行。而每次运行不同,是因为程序向CPU提交线程操作的时候,可能会产生一定的时间差引起的。
比如正常来讲“Thread[最高优先级线程-3,10,main]:最高优先级线程-3”这个线程肯定是先于低优先级线程运行的,但你给出的结果中却不是,这是因为低优先级线程运行的时候,这个高优先级线程还在没提交给CPU进行计算,所以延迟了。
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照