首页上一页 1 下一页尾页 1 条记录 1/1页
关于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])...如此往复。
但结果和我想的这两种都不一样,能不能解释一下他执行的步骤,并帮我解释一下。麻烦啦,万分感谢!!!
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])...如此往复。
但结果和我想的这两种都不一样,能不能解释一下他执行的步骤,并帮我解释一下。麻烦啦,万分感谢!!!