Java-Thread01之創建執行緒
- 2019 年 10 月 12 日
- 筆記
——  —— ## 我 **QQ:1755497577(備註:部落格)** **B站:code_ant(java相關培訓影片)**  —— ## 簡述 – 執行緒創建 demo:https://github.com/LiJinHongPassion/ThreadTest 四種創建方式分類 — **有返回值** – 實現callable介面 – **無返回值** – 繼承 Thread 類 – 實現 Runnable 介面 — **thread類api** – 繼承 Thread 類 – 實現 Runnable 介面 **執行緒池** – 實現callable介面 – — **Thread 類** 在上一天內容中我們已經可以完成最基本的執行緒開啟,那麼在我們完成操作過程中用到了 java.lang.Thread 類,API中該類中定義了有關執行緒的一些方法,具體如下: 構造方法: – public Thread() :分配一個新的執行緒對象。 – public Thread(String name) :分配一個指定名字的新的執行緒對象。 – public Thread(Runnable target) :分配一個帶有指定目標新的執行緒對象。 – public Thread(Runnable target,String name) :分配一個帶有指定目標新的執行緒對象並指定名字。 常用方法: – public String getName() :獲取當前執行緒名稱。 – public void start() :導致此執行緒開始執行; Java虛擬機調用此執行緒的run方法。 – public void run() :此執行緒要執行的任務在此處定義程式碼。 – public static void sleep(long millis) :使當前正在執行的執行緒以指定的毫秒數暫停(暫時停止執行)。 – public static Thread currentThread() :返回對當前正在執行的執行緒對象的引用。 翻閱API後得知創建執行緒的方式總共有兩種,一種是繼承Thread類方式,一種是實現Runnable介面方式,方式一我們上一天已經完成,接下來講解方式二實現的方式。 ## 繼承 Thread 類 Thread 類本質上是實現了 Runnable 介面的一個實例,代表一個執行緒的實例。啟動執行緒的唯一方法就是通過 Thread 類的 start()實例方法。start()方法是一個 native 方法,它將啟動一個新執行緒,並執行 run()方法。 “`java public class MyThread extends Thread { public void run() { System.out.println(“MyThread.run()”); } } //啟動 MyThread myThread1 = new MyThread(); myThread1.start(); “` ## 實現 Runnable 介面 如果自己的類已經 extends 另一個類,就無法直接 extends Thread,此時,可以實現一個Runnable 介面。 “`java public class MyThread extends OtherClass implements Runnable { public void run() { System.out.println(“MyThread.run()”); } } //啟動 MyThread,需要首先實例化一個 Thread,並傳入自己的 MyThread 實例: MyThread myThread = new MyThread(); Thread thread = new Thread(myThread); thread.start(); //事實上,當傳入一個 Runnable target 參數給 Thread 後,Thread 的 run()方法就會調用target.run() public void run() { if (target != null) { target.run(); } } “` ## ExecutorService 、Callable
擴充:在java中,每次程式運行至少啟動2個執行緒。一個是main執行緒,一個是垃圾收集執行緒。因為每當使用java命令執行一個類的時候,實際上都會啟動一個JVM,每一個JVM其實在就是在作業系統中啟動了一個進程。
## 匿名內部類方式實現執行緒的創建 使用執行緒的內匿名內部類方式,可以方便的實現每個執行緒執行不同的執行緒任務操作。 使用匿名內部類的方式實現Runnable介面,重新Runnable介面中的run方法: “`java public class NoNameInnerClassThread { public static void main(String[] args) { // new Runnable(){ // public void run(){ // for (int i = 0; i < 20; i++) { // System.out.println("張宇:"+i); // } // } // }; //‐‐‐這個整體 相當於new MyRunnable() Runnable r = new Runnable(){ public void run(){ for (int i = 0; i < 20; i++) { System.out.println("張宇:"+i); } } }; new Thread(r).start(); ``` > 本文由部落格一文多發平台 [OpenWrite](https://openwrite.cn) 發布!