前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
方式1:繼承Thread類
步驟:
1):定義一個類A繼承于Java.lang.Thread類.
2):在A類中覆蓋Thread類中的run方法.
3):我們在run方法中編寫需要執行的操作:run方法里的代碼,線程執行體.
4):在main方法(線程)中,創建線程對象,并啟動線程.
(1)創建線程類對象: ???????????????
A類 ??a ?= ?new ??A類();
(2)調用線程對象的start方法: ???
a.start();//啟動一個線程
?
注意:千萬不要調用run方法,如果調用run方法好比是對象調用方法,依然還是只有一個線程,并沒有開啟新的線程.
線程只能啟動一次!
創建啟動線程實例:
?
- //1):定義一個類A繼承于java.lang.Thread類.??
- class?MusicThread?extends?Thread{??
- ????//2):在A類中覆蓋Thread類中的run方法.??
- ????public?void?run()?{??
- ????????//3):在run方法中編寫需要執行的操作??
- ????????for(int?i?=?0;?i?<?50;?i?++){??
- ????????????System.out.println("播放音樂"+i);??
- ????????}??
- ????}??
- }??
- ??
- public?class?ExtendsThreadDemo?{??
- ????public?static?void?main(String[]?args)?{??
- ??????????
- ????????for(int?j?=?0;?j?<?50;?j?++){??
- ????????????System.out.println("運行游戲"+j);??
- ????????????if(j?==?10){??
- ????????????????//4):在main方法(線程)中,創建線程對象,并啟動線程.??
- ????????????????MusicThread?music?=?new?MusicThread();??
- ????????????????music.start();??
- ????????????}??
- ????????}??
- ????}??
- ??
- }??
?
?
方式2:實現Runnable接口
步驟:
1):定義一個類A實現于java.lang.Runnable接口,注意A類不是線程類.
2):在A類中覆蓋Runnable接口中的run方法.
3):我們在run方法中編寫需要執行的操作:run方法里的,線程執行體.
4):在main方法(線程)中,創建線程對象,并啟動線程.
?????(1)創建線程類對象:
?????Thread ?t = new Thread(new ?A()); ???
?????(2)調用線程對象的start方法:
? ? ?t.start();
?
- //1):定義一個類A實現于java.lang.Runnable接口,注意A類不是線程類.??
- class?MusicImplements?implements?Runnable{??
- ????//2):在A類中覆蓋Runnable接口中的run方法.??
- ????public?void?run()?{??
- ????????//3):在run方法中編寫需要執行的操作??
- ????????for(int?i?=?0;?i?<?50;?i?++){??
- ????????????System.out.println("播放音樂"+i);??
- ????????}??
- ??????????
- ????}??
- }??
- ??
- public?class?ImplementsRunnableDemo?{??
- ????public?static?void?main(String[]?args)?{??
- ????????for(int?j?=?0;?j?<?50;?j?++){??
- ????????????System.out.println("運行游戲"+j);??
- ????????????if(j?==?10){??
- ????????????????//4):在main方法(線程)中,創建線程對象,并啟動線程??
- ????????????????MusicImplements?mi?=?new?MusicImplements();??
- ????????????????Thread?t?=?new?Thread(mi);??
- ????????????????t.start();??
- ????????????}??
- ????????}??
- ????}??
- ??
- }??
?
分析繼承方式和實現方式的區別:
?
繼承方式:
? ? ? ? ? ? ? ? 1):從設計上分析,Java中類是單繼承的,如果繼承了Thread了,該類就不能再有其他的直接父類了.
? ? ? ? ? ? ? ? 2):從操作上分析,繼承方式更簡單,獲取線程名字也簡單.(操作上,更簡單)
? ? ? ? ? ? ? ? 3):從多線程共享同一個資源上分析,繼承方式不能做到.
實現方式:
? ? ? ? ? ? ? ? 1):從設計上分析,Java中類可以多實現接口,此時該類還可以繼承其他類,并且還可以實現其他接口,設計更為合理.
? ? ? ? ? ? ? ? 2):從操作上分析,實現方式稍微復雜點,獲取線程名字也比較復雜,得使用Thread.currentThread()來獲取當前線程的引用.
?? ? ? ? ? ? ? 3):從多線程共享同一個資源上分析,實現方式可以做到(是否共享同一個資源).
?
補充:實現方式獲取線程名字:
String name = Thread.currentThread().getName();
?
?
?
?
方式3:直接在函數體使用(匿名內部類,其實也是屬于第二種實現方式的特例。)
?
?
- void?java_thread()??
- {??
- ??
- ?????Thread?t?=?new?Thread(new?Runnable(){??
- ????????????public?void?run(){??
- ? ? ? ? ? ?// run方法具體重寫
- ? ??mSoundPoolMap.put(index,?mSoundPool.load(filePath,?index));??
- ????????????getThis().LoadMediaComplete();??
- ????????????}});??
- ????????t.start();??
- }??
?
?
?