標籤:main get 準備 cep 安排時間 inter tst this 多線程
Thread 類
Thread 類是在 JDK1.0 時就存在的, 在 Java 中接觸的多線程開發基本上都會從這個類開始。
Thread之定義線程類
使用 Thread 建立線程的方法很簡單, Thread 是一個類, 在需要建立線程時, 我們只需要繼承這個類, 並將 run() 方法進行重寫即可。
class PrimeThread extends Thread { long minPrime; PrimeThread(long minPrime) { this.minPrime = minPrime; } @Override public void run() { System.out.println(Thread.currentThread().getName()+" begin"); try { Thread.sleep(500); System.out.println(minPrime); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+" end"); }}
以上的 PrimeThread 類, 繼承了 Thread 類, 因此, 可以通過該類來實現開啟線程。
Thread之開啟線程
開啟線程的方法具體如下:
public static void main(String[] args) { System.out.println("Thread begin:" + Thread.currentThread().getName()); PrimeThread primeThread = new PrimeThread(100L); primeThread.start(); System.out.println("Thread end:" + Thread.currentThread().getName());}
調用時, new 出一個 PrimeThread 類的對象, 然後調用 start() 方法(注意不是調用 run() 方法)。最終得到的結果如下
建立一個簡單的多線程在 Java 裡面就是這麼簡單, 但因為 Java 是單繼承的 因此繼承 Thread 類是很不划算的一種做法。 而在 JDK1.0 , 提供了另一種方式可以對此進行彌補, 就是實現 Runnable 介面的方式。
Runnable 介面Runnable 之定義線程類
至此,使用 Runnable 介面的方式來建立多線程類的方式就是實現 Runnable, 然後重寫 run() 方法, 具體如下:
public class PrimeRun implements Runnable { long minPrime; PrimeRun(long minPrime) { this.minPrime = minPrime; } public void run() { System.out.println(Thread.currentThread().getName() + " Run begin"); try { Thread.sleep(500); System.out.println(minPrime); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + " Run end"); }}
Runnable 之開啟線程
大體上與繼承 Thread 類類似, 但我們可以不用繼承。 調用的話還是要通過 Thread 類的, 調用方式如下:
public static void main(String[] args) { System.out.println(Thread.currentThread().getName()+" begin"); PrimeRun primeRun = new PrimeRun(100L);// new new Thread(primeRun).start(); // 調用 System.out.println(Thread.currentThread().getName()+" end");}
運行結果如下
可以發現,其實該兩種實現多線程的方式在本質上都是一樣的。最終都通過 Thread 類中的 start() 方法來開啟線程, 該方法可以通知 「線程規劃器」本線程已經準備就緒, 系統就可以安排時間來調用 Thread 類中的 run() 方法。因此, 如果沒有分配優先順序, 線程執行的順序就是根據系統的調度演算法來執行, 是無序的。
以上是對 Java 最基本的開啟多線程的方法進行了介紹, 後面幾篇會更深入一下介紹一下幾個方法和原理。
Java 多線程之 Thread 類 和 Runnable 介面初步使用