Java進階必備之多線程編程
一、圖示
二、多線程編程
何為多線程,通俗的講就是讓你的代碼同時幹好幾件事。
而我們的一個代碼文件或者一個項目就是一個進程,而如果我們想提高效率,我們可以多開幾個文件進行多進程,也可以在進程中創建多線程(多寫幾個方法),但是多進程比較耗費資源,所以一般推薦多線程,在代碼裡,讓代碼做幾個文件做的事。
多線程編程可以讓我們的代碼擁有更高效率。
三、線程的工作過程
猶如上圖
使用多線程需要先創建一個或者多個線程
然後讓線程調用CPU資源,開始運行
然後運行完畢等待所有線程運行完畢
然後刪除資源,結束線程
Java線程擁有優先級
優先級就是系統確定線程的調度順序,但是不執行順序,因為多線程的執行是具有無序性的。
調度順序隻是系統分配資源的順序,不分配資源就無法執行。
四、創建多線程
如何在Java代碼中創建多線程,Java內置瞭用於多線程的庫。
1.繼承Thread類,重寫run()方法
我們需要寫一個類A來繼承Thread類,並重寫run()方法。
run()方法裡面放我們需要進行多線程的代碼。
然後再在主類中實例化類A的對象,並且調用strat方法。
public class TheadText { public static void main(String[] args) { //實例化StartThread,並調用start方法使線程動起來 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類並重寫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); } }
運行結果(還可以體現線程的無序性):
2. 實現接口Runnable接口,實現run方法
使用Runnable接口避免瞭單繼承的局限性,線程類隻是實現瞭 Runnable 接口,還可以繼承其他類
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. 實現Runnable接口,實現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. 實現Callable接口,實現call方法
這個我研究瞭挺大一會兒。
實現這個接口後,還需要實現call方法
然後通過FutureTask類來對我們實例化對象進行封裝
最後還要實例化Thread類進行start操作開啟我們的線程
代碼演示:
public class TheadText { public static void main(String[] args) { //先實例化 StartCallable a = new StartCallable(); //然後調用FutureTask類 FutureTask<String> te1 = new FutureTask<>(a); //設置我們的name屬性 a.name = " 一 "; //開啟我們的線程一 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(); } } /** * 實現Callable接口,實現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; } }
運行結果:
線程的生命周期
線程在我們創建後(出生)等待CPU的資源分配,然後開始工作,在工作完我們分配的工作後,就會(死亡)消失
到此這篇關於Java進階必備之多線程編程的文章就介紹到這瞭,更多相關Java多線程編程內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java使用Runnable和Callable實現多線程的區別詳解
- Java創建線程及配合使用Lambda方式
- Java並發教程之Callable和Future接口詳解
- java面試常問的Runnable和Callable的區別
- java中多線程與線程池的基本使用方法