java多執行緒|創建執行緒的各種方式
- 2019 年 11 月 7 日
- 筆記
javaDEMO
本網站記錄了最全的各種JavaDEMO ,保證下載,複製就是可用的,包括基礎的, 集合的, spring的, Mybatis的等等各種,助力你從菜鳥到大牛,記得收藏哦~~ https://www.javastudy.cloud
創建執行緒
繼承Thread類
/** * @Author https://www.javastudy.cloud * @CreateTime 2019/11/01 **/ public class ThreadStudy extends Thread{ /** * 繼承Thread類並且重寫run方法, * 這個方法並不常用,因為一個java類只能繼承一個類 */ @Override public void run() { System.out.println("run in sub Thread , Thread name is "+ Thread.currentThread().getName()); } public static void main(String[] args) { System.out.println("run in main Thead , Thread name is "+ Thread.currentThread().getName()); ThreadStudy study = new ThreadStudy(); //注意啟動執行緒要用 start()方法 study.start(); try { //讓主執行緒休眠兩秒,讓子執行緒有足夠的時間運行 Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }
運行結果:

實現Runnable介面
這種讓一個類直接實現Runnable介面顯得有些笨重 實際開發中,經常會用下面匿名類的方式創建執行緒
/** * @Author https://www.javastudy.cloud * @CreateTime 2019/11/01 **/ public class ThreadStudy implements Runnable{ /** * 實現Runnable介面, * 這個是常用的方法,因為一個java類可以實現多個介面 */ @Override public void run() { System.out.println("run in sub Thread , Thread name is "+ Thread.currentThread().getName()); } public static void main(String[] args) { System.out.println("run in main Thead , Thread name is "+ Thread.currentThread().getName()); //要先new 一個Thread // 然後把實現Runnable介面的類傳入到Thread的構造函數中 ThreadStudy study = new ThreadStudy(); Thread thread = new Thread(study); //注意啟動執行緒要用 start()方法 thread.start(); try { //讓主執行緒休眠兩秒,讓子執行緒有足夠的時間運行 Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }
使用匿名類來創建執行緒,這裡使用了lambda的寫法,也是實際開發中常用的寫法
/** * @Author https://www.javastudy.cloud * @CreateTime 2019/11/01 **/ public class ThreadStudy { public static void main(String[] args) { System.out.println("run in main Thread , Thread name is "+ Thread.currentThread().getName()); // 不用類實現Runnable介面了, 直接這樣定義,方便,省事 Runnable runnable = ()-> System.out.println("run in sub Thread, Thread name is "+Thread.currentThread().getName()); // 啟動這個執行緒還是要用Thread來包裝下,然後調用Thread.start()方法 Thread thread = new Thread(runnable); thread.start(); try { //讓主執行緒休眠兩秒,讓子執行緒有足夠的時間運行 Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } } }
使用執行緒池
/** * @Author https://www.javastudy.cloud * @CreateTime 2019/11/01 **/ public class ThreadStudy { public static void main(String[] args) { System.out.println("Run in main Thread, Thread name is "+ Thread.currentThread().getName()); //一句話就可以創建一個執行緒池下面這種寫法執行緒沒有上限,實際開發中不太推薦 // 開發中一般是用下行注釋的方法,或者自定義執行緒池參數 // 常用的還有 Executors.newFixedThreadPool(10);去創建固定10個執行緒的池子,這個也有弊端,就是等待的隊列沒有上界 // ExecutorService service = Executors.newCachedThreadPool(); // 沒有返回值的處理 service.submit(()-> System.out.println("Run in sub Thread, Thread name is "+Thread.currentThread().getName())); // 有返回值的處理,用一個Future 去接收 Future<String> submit = service.submit(() -> "Run in sub Thread with return , Thread name is " + Thread.currentThread().getName()); //輸出future裡面的值 try { System.out.println(submit.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } }
運行結果:
