这是一道Java线程的问题,在eclipse上运行了下发现没有任何输出,请大神解答一下。
守护线程,两个线程的执行顺序。publicclassAextendsThread{A(){setDaemon(true);}publicvoidrun(){(newB()...
守护线程,两个线程的执行顺序。
public class A extends Thread {
A(){
setDaemon(true);
}
public void run(){
(new B()).start();
try{
Thread.sleep(60);
System.out.println("A done");
}
catch(InterruptedException x){
System.out.println("A done");
}
}
public static void main(String[]args){
A a=new A();
a.start();
}
}
class B extends Thread{
public void run(){
try{
Thread.sleep(60000);
System.out.println("B done");
}
catch(InterruptedException x){
System.out.println("B done");
}
}
} 展开
public class A extends Thread {
A(){
setDaemon(true);
}
public void run(){
(new B()).start();
try{
Thread.sleep(60);
System.out.println("A done");
}
catch(InterruptedException x){
System.out.println("A done");
}
}
public static void main(String[]args){
A a=new A();
a.start();
}
}
class B extends Thread{
public void run(){
try{
Thread.sleep(60000);
System.out.println("B done");
}
catch(InterruptedException x){
System.out.println("B done");
}
}
} 展开
2个回答
展开全部
因为你一开始这个程序就没有线程在执行了, A作为守护线程,发现没有任何线程执行,自动退出,根本不会执行run里面的业务代码的
也就是但这个程序还有其他线程在执行, 守护线程才会去执行run里面的代码
要实现输出, 就在main方法里面new一个B线程,让程序一开始就有一个非守护线程在执行
public static void main(String[]args){
A a=new A();
a.start();
new B().start();
}
更多追问追答
追问
但是您给的new B().start()这段代码写在a.start()之后,是不是可能出现:
1、a先启动,B后启动a退出,B中的run执行并输出;
2、B先启动,a后启动,a作为B的守护线程,a和B都可能输出。
我分析的对么?
追答
这有关系吗? B里面休眠时间那么长, 无论如何AB都会输出
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询