線程創建的第二種方法
阿新 • • 發佈:2018-10-08
private str 繼承 run方法 string pri light imp 今天
第一種方法是繼承並且重寫run方法(不推薦使用)
第二種就是有爹的情況,用實現接口的形式拓展功能——實現Runnable接口
Runnable中只有run()方法
今天復習同步線程代碼時候卡在一個問題上:
class SynThread implements Runnable { run() { } } class Main { public static void main(string [] args) { SynThread syn=new SynThread(); Thread a=new Thread(syn); //問題:為啥要傳syn進去??? a.start(); } }
後來看了畢老師視頻後才明白。
解釋:
//Thread有一種Thread(Runnable a) 的初始化方法 class Thread implements Runnable { private Runnable i; Thread(Runnable i) //④ { this i=i; } run()//Thread類實現的Runnable方法 //② { i.run(); } strat() { run(); //① } } class SynThread implements Runnable { run() //③ { syso("子類SubThread"); } } class SubThread extend Thread { run() //⑤ { syso("子類SubThread"); } } class Main { public static void main(...) { SubTread sub=new SubThread(); sub.start(); // 由①-->③ Thread th=new Thread(); th.strat(); // 有①-->② 但是這時i無值,所以會報錯,可以在②裏加上判斷語句 SynThread syn=new SynThread(); Thread th=new Thread(syn); //這裏直接進入④ 給i賦了值 th.start(); // ①-->②-->⑤ } }
線程創建的第二種方法