1. 程式人生 > >創建線程時如果既傳入了runnable對象,又繼承thread重寫了run方法,會執行的哪裏的代碼

創建線程時如果既傳入了runnable對象,又繼承thread重寫了run方法,會執行的哪裏的代碼

繼承 ide get color ride .get print override new

1 使用線程的方式,繼承thread類,重寫run方法

        new Thread() {
            
            @Override
            public void run() {
                System.out.println("我是新的線程");
            }
                        
        }.start();

重寫之後,線程執行的就是我們自己的run方法,而在Thread類中的run方法就不會被執行

這是Thread類的run方法

技術分享圖片

在這個方法中判斷target是否為null,不為null,才執行target的run方法

2 既傳入了runnable對象,又繼承thread重寫了run方法

        Runnable runnable = new Runnable() {
            
            @Override
            public void run() {
                System.out.println("2  : "+Thread.currentThread().getName());
                System.out.println("*************");
            }
        };
        
        
new Thread(runnable) { @Override public void run() { super.run(); System.out.println("1 : "+Thread.currentThread().getName()); System.out.println("##############"); } }.start();

註意:重寫了run方法,就不會執行父類Thread的run方法,關鍵看在重寫的run方法裏,有沒有調用super.run(),有調用就會執行傳入的runnable,沒有調用就不會執行傳入的runnable

始終只會是創建一個線程,打印的線程名是一樣的

技術分享圖片

創建線程時如果既傳入了runnable對象,又繼承thread重寫了run方法,會執行的哪裏的代碼