- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- Java進(jìn)階必備之多線(xiàn)程編程
何為多線(xiàn)程,通俗的講就是讓你的代碼同時(shí)干好幾件事。
而我們的一個(gè)代碼文件或者一個(gè)項目就是一個(gè)進(jìn)程,而如果我們想提高效率,我們可以多開(kāi)幾個(gè)文件進(jìn)行多進(jìn)程,也可以在進(jìn)程中創(chuàng )建多線(xiàn)程(多寫(xiě)幾個(gè)方法),但是多進(jìn)程比較耗費資源,所以一般推薦多線(xiàn)程,在代碼里,讓代碼做幾個(gè)文件做的事。
多線(xiàn)程編程可以讓我們的代碼擁有更高效率。
猶如上圖
使用多線(xiàn)程需要先創(chuàng )建一個(gè)或者多個(gè)線(xiàn)程
然后讓線(xiàn)程調用CPU資源,開(kāi)始運行
然后運行完畢等待所有線(xiàn)程運行完畢
然后刪除資源,結束線(xiàn)程
Java線(xiàn)程擁有優(yōu)先級
優(yōu)先級就是系統確定線(xiàn)程的調度順序,但是不執行順序,因為多線(xiàn)程的執行是具有無(wú)序性的。
調度順序只是系統分配資源的順序,不分配資源就無(wú)法執行。
如何在Java代碼中創(chuàng )建多線(xiàn)程,Java內置了用于多線(xiàn)程的庫。
1.繼承Thread類(lèi),重寫(xiě)run()方法
我們需要寫(xiě)一個(gè)類(lèi)A來(lái)繼承Thread類(lèi),并重寫(xiě)run()方法。
run()方法里面放我們需要進(jìn)行多線(xiàn)程的代碼。
然后再在主類(lèi)中實(shí)例化類(lèi)A的對象,并且調用strat方法。
public class TheadText { public static void main(String[] args) { //實(shí)例化StartThread,并調用start方法使線(xiàn)程動(dòng)起來(lái) StartThread t1 = new StartThread("一 "); t1.start(); StartThread t2 = new StartThread("二 "); t2.start(); StartThread t3 = new StartThread("三 "); t3.start(); StartThread t4 = new StartThread("四 "); t4.start(); } } /** * 1.繼承Thread類(lèi)并重寫(xiě)run方法 */ class StartThread extends Thread{ String name; StartThread(String name){ this.name = name; } @Override public void run() { System.out.println(name+1); System.out.println(name+2); System.out.println(name+3); System.out.println(name+4); System.out.println(name+5); } }
運行結果(還可以體現線(xiàn)程的無(wú)序性):
2. 實(shí)現接口Runnable接口,實(shí)現run方法
使用Runnable接口避免了單繼承的局限性,線(xiàn)程類(lèi)只是實(shí)現了 Runnable 接口,還可以繼承其他類(lèi)
public class TheadText { public static void main(String[] args) { StartRunnable startRunnable1 = new StartRunnable(" 一 "); Thread te1 = new Thread(startRunnable1); te1.start(); StartRunnable startRunnable2 = new StartRunnable(" 二 "); Thread te2 = new Thread(startRunnable2); te2.start(); StartRunnable startRunnable3 = new StartRunnable(" 三 "); Thread te3 = new Thread(startRunnable3); te3.start(); StartRunnable startRunnable4 = new StartRunnable(" 四 "); Thread te4 = new Thread(startRunnable4); te4.start(); } } /** * 2. 實(shí)現Runnable接口,實(shí)現run方法 */ class StartRunnable implements Runnable{ String name; // 重載一下方法,利于區分 StartRunnable(String name){ this.name = name; } @Override public void run() { System.out.println(name+1); System.out.println(name+2); System.out.println(name+3); System.out.println(name+4); System.out.println(name+5); } }
運行結果:
3. 實(shí)現Callable接口,實(shí)現call方法
這個(gè)我研究了挺大一會(huì )兒。
實(shí)現這個(gè)接口后,還需要實(shí)現call方法
然后通過(guò)FutureTask類(lèi)來(lái)對我們實(shí)例化對象進(jìn)行封裝
最后還要實(shí)例化Thread類(lèi)進(jìn)行start操作開(kāi)啟我們的線(xiàn)程
代碼演示:
public class TheadText { public static void main(String[] args) { //先實(shí)例化 StartCallable a = new StartCallable(); //然后調用FutureTask類(lèi) FutureTask<String> te1 = new FutureTask<>(a); //設置我們的name屬性 a.name = " 一 "; //開(kāi)啟我們的線(xiàn)程一 new Thread(te1).start(); StartCallable b = new StartCallable(); FutureTask<String> te2 = new FutureTask<>(b); b.name = " 二 "; new Thread(te2).start(); StartCallable c = new StartCallable(); FutureTask<String> te3 = new FutureTask<>(c); c.name = " 三 "; new Thread(te3).start(); StartCallable d = new StartCallable(); FutureTask<String> te4 = new FutureTask<>(d); d.name = " 四 "; new Thread(te4).start(); } } /** * 實(shí)現Callable接口,實(shí)現call方法 */ class StartCallable implements Callable<String>{ String name ; public String call() throws Exception{ System.out.println(name+1); System.out.println(name+2); System.out.println(name+3); System.out.println(name+4); return name; } }
運行結果:
線(xiàn)程的生命周期
線(xiàn)程在我們創(chuàng )建后(出生)等待CPU的資源分配,然后開(kāi)始工作,在工作完我們分配的工作后,就會(huì )(死亡)消失
到此這篇關(guān)于Java進(jìn)階必備之多線(xiàn)程編程的文章就介紹到這了,更多相關(guān)Java多線(xiàn)程編程內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站