Java多執行緒實現方式

好程式設計師發表於2020-07-15

  好程式設計師 Java 培訓分享 Java 多執行緒實現方式, Java 多執行緒實現方式主要有三種:繼承Thread 類、實現 Runnable 介面、使用 ExecutorService Callable Future 實現有返回結果的多執行緒。其中前兩種方式執行緒執行完後都沒有返回值,只有最後一種是帶返回值的。如下:

   1 、繼承 Thread 類實現多執行緒

   繼承Thread 類的方法儘管被我列為一種多執行緒實現方式,但 Thread 本質上也是實現了 Runnable 介面的一個例項,它代表一個執行緒的例項,並且,啟動執行緒的唯一方法就是透過 Thread 類的 start() 例項方法。 start() 方法是一個 native 方法,它將啟動一個新執行緒,並執行 run() 方法。這種方式實現多執行緒很簡單,透過自己的類直接 extend Thread ,並複寫 run() 方法,就可以啟動新執行緒並執行自己定義的 run() 方法。例如:

   [ Java ] view plain copypublic class MyThread extends Thread {

   public void run() {

   System.out.println("MyThread.run()");

   }

   }

   在合適的地方啟動執行緒如下:

   [ Java ] view plain copyMyThread myThread1 = new MyThread();

   MyThread myThread2 = new MyThread();

   myThread1.start();

   myThread2.start();

   2 、實現 Runnable 介面方式實現多執行緒

   如果自己的類已經extends 另一個類,就無法直接 extends Thread ,此時,必須實現一個 Runnable 介面,如下:

   [ Java ] view plain copypublic class MyThread extends OtherClass implements Runnable {

   public void run() {

   System.out.println("MyThread.run()");

   }

   }

   為了啟動MyThread ,需要首先例項化一個 Thread ,並傳入自己的 MyThread 例項:

   [ Java ] view plain copyMyThread myThread = new MyThread();

   Thread thread = new Thread(myThread);

   thread.start();

   事實上,當傳入一個Runnable target 引數給 Thread 後, Thread run() 方法就會呼叫 target.run() ,參考 JDK 原始碼:

   [ Java ] view plain copypublic void run() {

   if (target != null) {

   target.run();

   }

   }

   3 、使用 ExecutorService Callable Future 實現有返回結果的多執行緒

   ExecutorService Callable Future 這個物件實際上都是屬於 Executor 框架中的功能類。 這裡面對該框架做了很詳細的解釋。返回結果的執行緒是在 JDK1.5 中引入的新特徵,確實很實用,有了這種特徵我就不需要再為了得到返回值而大費周折了,而且即便實現了也可能漏洞百出。

   可返回值的任務必須實現Callable 介面,類似的,無返回值的任務必須 Runnable 介面。執行 Callable 任務後,可以獲取一個 Future 的物件,在該物件上呼叫 get 就可以獲取到 Callable 任務返回的 Object 了,再結合執行緒池介面 ExecutorService 就可以實現傳說中有返回結果的多執行緒了。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2704650/,如需轉載,請註明出處,否則將追究法律責任。

相關文章