創建線程時如果既傳入了runnable對象,又繼承thread重寫了run方法,會執行的哪裏的代碼
阿新 • • 發佈:2019-04-12
繼承 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方法,會執行的哪裏的代碼