在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/Java  C  Linux/ 關(guān)于Java當(dāng)中繼承的疑問(wèn)

關(guān)于Java當(dāng)中繼承的疑問(wèn)

這是我運(yùn)行的Test.java文件的源碼,Sub類(lèi)繼承的是Main類(lèi),MyThreadA和MyThreadB都是線程類(lèi)

package service;

public class Test {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Sub subRef = new Sub();
        MyThreadA a = new MyThreadA(subRef);
        a.setName("A");
        a.start();
        MyThreadB b = new MyThreadB(subRef);
        b.setName("B");
        b.start();
    }

}

如下是控制臺(tái)的運(yùn)行結(jié)果,我的疑問(wèn)是為什么Main類(lèi)里面的serviceMethod()方法也被調(diào)用了?線程MyThreadA和線程MyThreadB的run()方法不是只是調(diào)用了Sub類(lèi)里面的serviceMethod()方法嗎?

int sub 下一步 sleep begin threadName=A time=1521894980829
int sub 下一步 sleep begin threadName=B time=1521894980829
int sub 下一步 sleep end threadName=A time=1521894985834
int sub 下一步 sleep end threadName=B time=1521894985834
int main 下一步 sleep begin threadName=A time=1521894985835
int main 下一步 sleep end threadName=A time=1521894990838
int main 下一步 sleep begin threadName=B time=1521894990838
int main 下一步 sleep end threadName=B time=1521894995840

如下是MyThreadA類(lèi)

package service;

public class MyThreadA extends Thread {
    
    private Sub sub;

    public MyThreadA(Sub sub) {
        super();
        this.sub = sub;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        sub.serviceMethod();
    }
    
    
}

如下是MyThreadB類(lèi)

package service;

public class MyThreadB extends Thread {
    
    private Sub sub;

    public MyThreadB(Sub sub) {
        super();
        this.sub = sub;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        sub.serviceMethod();
    }
    
    
    
}

如下是Main類(lèi)

package service;

public class Main {
    synchronized public void serviceMethod() {
        try {
            System.out.println("int main 下一步 sleep begin threadName="
                    + Thread.currentThread().getName() + " time="
                    + System.currentTimeMillis());
            Thread.sleep(5000);
            System.out.println("int main 下一步 sleep end threadName="
                    + Thread.currentThread().getName() + " time="
                    + System.currentTimeMillis());
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}

如下是Sub類(lèi),繼承Main類(lèi)

package service;

public class Sub extends Main {
    @Override
    public void serviceMethod() {
        try {
            System.out.println("int sub 下一步 sleep begin threadName="
                    + Thread.currentThread().getName() + " time="
                    + System.currentTimeMillis());
            Thread.sleep(5000);
            System.out.println("int sub 下一步 sleep end threadName="
                    + Thread.currentThread().getName() + " time="
                    + System.currentTimeMillis());
            super.serviceMethod();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    }
}
回答
編輯回答
厭遇

去掉super.serviceMethod();

2017年6月7日 12:38
編輯回答
爆扎

基本概念都沒(méi)有搞清楚,就去學(xué)線程合適嗎?

2018年4月9日 21:26