1. 程式人生 > 實用技巧 >多執行緒第一篇

多執行緒第一篇

一、什麼是執行緒?什麼是程序?

  程序:我們的電腦上的每個軟體都可看作一個程序,以一個瀏覽器為例。

  執行緒:執行緒可以看作是瀏覽器上開啟的一個網頁,一個網頁就是一個執行緒。多執行緒的存在讓我們可以在同一時間進行多個動作,比如邊聽歌邊聊天。

 我們執行java程式,開啟jvm,就是開了一個程序。

二、多個執行緒是同時執行的嗎?

  這個要看你的電腦處理器是幾核的,如果一核處理器,那麼多個執行緒就會被安排快速的交替執行。多核處理器,會讓幾個執行緒同時進行。

三、建立多執行緒

  建立多執行緒有兩種方式,一般都這樣說。但是建立多執行緒只能通過Thread類,那為什麼還要說有兩種,等下說,我們先看怎麼建立執行緒。

  首先說明執行緒的執行步驟:thread物件呼叫start()方法,strat()方法自動 呼叫run()方法,run()方法中寫的執行緒的業務邏輯,從而實現執行緒的執行單元

  (1)實現Runnable介面,重寫run()方法  

//Runnable的原始碼
public interface Runnable{
  public void run();      
}


//實現Runnable介面
public class RunnableImpl implement Runnable{
     private int i;
     public Runnable(int i){
        
this.i=i; } public void run(){ System.out.println(i); } }

public class ceshi{
  public static void main(String[] arg){
    RunnableImpl runnableImpl=new RunnableImpl(2);
    Thread thread=new Thread(runableImpl,"threadName");
    //開啟執行緒
    thread.start();
  }
}

  (2)繼承Thread類,重寫run()方法(Thread類在原始碼中也是實現了Runnable介面)

//繼承thread類
public class ThreadE extends Thread{
  //這個成員變數不是設定執行緒名字的,只是用來列印用的   
  private String threadname;
   
  public ThreadE(String threadname){
         this.threadname=threadname; 
  }    
   
  public void run(){
    System.out.println(threadname);  
  }    
}


public class ceshi2{
   public static void main(String[] arg){
        ThreadE threadE=new ThreadE("這是繼承Thread類實現的");
        Thread thread=new Thread(threadE);
      //開啟執行緒 thread.start(); } }

上文提到的,我們對建立執行緒的方式到底是一種還是兩種存在疑問。現在進行說明:

  在JDK中代表執行緒的只有Thread類,所以建立執行緒之能通過Thread類。上面的兩種方法可以說是對執行緒的實現。我們觀察到,上面兩種方法中,最終實現執行緒都要通過"new Thread()"。

說明new Thread()中的引數 :

  Thread類中有幾個構造方法,我們最常見的是這個 :

      Thread(Runnable target,String ThreadName);

      第一個引數是實現Runnable介面的類的例項,第二個引數是為執行緒設定名字。也可以不設定名字,那就是用Thread(Runnable target);

    在Thread類中run()方法中,有如下原始碼:  

@Override
public void run(){
    //如果有Runnable的實現類的物件,就用物件的run()方法  
     if(target!=null){
        target.run();
     }
}

  如果直接new Thread()來建立執行緒,就會呼叫run()方法,如果實現了Runnable類或者繼承了Thread類,就會呼叫目標類中重寫後的run()方法。