[Android面試]Java創建線程的兩種方式

簡介

Java提供了兩種創建線程方法:

1、通過實現Runable接口;

2、通過繼承Thread類本身

詳述

聲明實現 Runnable 接口的類

該類然後實現 run 方法。然後可以分配該類的實例,在創建 Thread 時作爲一個參數來傳遞並啓動。例如,計算大於某一規定值的質數的線程可以寫成:

class PrimeRun implements Runnable {
         long minPrime;
         PrimeRun(long minPrime) {
             this.minPrime = minPrime;
         }
 
         public void run() {
             // compute primes larger than minPrime
              . . .
         }
     }

然後,下列代碼會創建並啓動一個線程:

 PrimeRun p = new PrimeRun(143);
     new Thread(p).start();

將類聲明爲 Thread 的子類

該子類應重寫 Thread 類的 run 方法。接下來可以分配並啓動該子類的實例。

 class PrimeThread extends Thread {
         long minPrime;
         PrimeThread(long minPrime) {
             this.minPrime = minPrime;
         }
 
         public void run() {
             // compute primes larger than minPrime
              . . .
         }
     }

然後,下列代碼會創建並啓動一個線程:

PrimeThread p = new PrimeThread(143);
     p.start();

  當 Java 虛擬機啓動時,通常都會有單個非守護線程(它通常會調用某個指定類的 main 方法)。Java 虛擬機會繼續執行線程,直到下列任一情況出現時爲止:   

調用了 Runtime 類的 exit 方法,並且安全管理器允許退出操作發生。

  • 非守護線程的所有線程都已停止運行,無論是通過從對 run 方法的調用中返回,還是通過拋出一個傳播到 run 方法之外的異常。

使用和區別

  Runable源碼:   

public interface Runnable {
    /**
     * When an object implementing interface <code>Runnable</code> is used
     * to create a thread, starting the thread causes the object's
     * <code>run</code> method to be called in that separately executing
     * thread.
     * <p>
     * The general contract of the method <code>run</code> is that it may
     * take any action whatsoever.
     *
     * @see     java.lang.Thread#run()
     */
    public abstract void run();
}

  Thread 類實現了 Runnable。激活的意思是說某個線程已啓動並且尚未停止。此外,Runnable 爲非 Thread 子類的類提供了一種激活方式。通過實例化某個 Thread 實例並將自身作爲運行目標,就可以運行實現 Runnable 的類而無需創建 Thread 的子類。大多數情況下,如果只想重寫 run() 方法,而不重寫其他 Thread 方法,那麼應使用 Runnable 接口。這很重要,因爲除非程序員打算修改或增強類的基本行爲,否則不應爲該類創建子類

  繼承Thread類實現多線程,要求放入多線程中的類不能繼承其他類(Java的單繼承特性),如果需要請用 Runnable 實現(接口可以多實現並不影響繼承其他類)。      一個實現Runnable接口的類可以放在多個線程中執行,多個線程可以去執行同一資源;而繼承Thread只能實現多個線程分別去處理自己的資源。(通過Runnable創建的多個線程可以由編程人員傳入同一個Runnable對象,即執行同一個run方法,而通過Thread創建的多線程它們運行的都是自己的run方法)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章