多執行緒第一篇
一、什麼是執行緒?什麼是程序?
程序:我們的電腦上的每個軟體都可看作一個程序,以一個瀏覽器為例。
執行緒:執行緒可以看作是瀏覽器上開啟的一個網頁,一個網頁就是一個執行緒。多執行緒的存在讓我們可以在同一時間進行多個動作,比如邊聽歌邊聊天。
我們執行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()方法。