1. 程式人生 > >java基礎(二十八)多執行緒一

java基礎(二十八)多執行緒一

【概念】 程序:

正在執行的程式叫做程序。比如,我開了一個QQ,那麼QQ在記憶體中就佔了一塊記憶體。

執行緒: 程序是不直接執行的,執行程式由執行緒來執行。程序只是負責分配記憶體控制元件。執行緒是執行路徑(控制單元)。 一個程序中可以多執行路徑,稱之為多執行緒 一個程序中至少要有一個執行緒

而多執行緒的執行是由cpu來切換處理的,這個切換的時間是很短的。

其實應用程式的執行都是cpu在做著快速切換完成的。這個切換是隨機的。

【多執行緒的好處和弊端】

好處:多部分程式碼同時執行

弊端:執行緒太多會影響cpu的處理效率。

【建立執行緒的方式】

方式一:繼承Thread類。

     步驟:      1.定義一個類繼承Thread類      2.覆蓋Thread類中的run方法      3.直接建立Thread的子類物件建立執行緒。      4.呼叫start()方法開啟執行緒並呼叫執行緒的任務run方法執行。 class Demo extends Thread{     public void run(){         //執行的邏輯程式碼 } }

Demo d=new Demo();

d.start();

     建立執行緒的目的是為了開啟一條執行路徑,去執行指定的程式碼和其他程式碼實現同時執行, 而執行的指定程式碼就是這個執行路徑的任務。jvm建立的主執行緒的任務都定義在了主函式中。 而自定義的執行緒它的任務在哪兒呢? Thread類用於描述執行緒,執行緒是需要任務的。所以Thread類也是對任務的描述。 這個任務就通過Thread類中的run方法來體現。也就是說,run方法就是封裝自定義執行緒執行任務的函式。 run方法中定義就是執行緒要執行的任務程式碼。 開啟執行緒是為了執行指定程式碼,所以只有繼承Thread類,並複寫run方法。 將執行的程式碼定義在run方法中即可。

【執行緒的名稱】

可以通過Thread的getName獲取執行緒的名稱 Thread-編號(從0開始)

Thread一建立就被編號了。

可以通過Thread.currentThread()獲取到當前正在執行的執行緒物件。

修改執行緒的名字。可以在構造方法中 呼叫的父類的構造方法,把名稱傳進去就可以了

class Demo extends Thread{

    Demo(String name){      super(name);

} }

【執行緒的狀態】

ps:臨時阻塞狀態:具備執行資格,不具備執行權,正在等待執行權。

    只有被cpu切換到的執行緒才有執行權,其他執行緒都是處於阻塞狀態。

    sleep、wait()中的執行緒處於阻塞狀態,所以執行狀態的執行緒也有可能處於阻塞狀態

1.被建立  start();                                        sleep(time)、wait()-用notify()喚醒 2.執行:具備著執行資格,具備執行權---------------------------------------------》凍結 :釋放執行權的同時釋放執行資格

run方法結束

執行緒的任務結束

stop()

3.消亡

【建立執行緒的第二種方式】

1.定義Runnable介面

2.覆蓋介面中的run方法,將執行緒的任務程式碼封裝到run方法中。

3.通過Thread類建立執行緒物件,並將Runnable介面的子類物件作為Thread類的建構函式的引數傳遞。

為什麼?因為執行緒的任務都封裝在Runnable介面子類物件的run方法中。 4.呼叫執行緒物件的start方法開啟執行緒

class Demo extends Runnable{

    public void run(){              for(int i=0;i<10;i++){

} }     

}

main中:

    Thread t=new Thread(new Runnable());

    t.start();

細節:

 Thread t=new Thread(new Runnable());

【使用Runnable的好處】

1.將執行緒的任務從執行緒的子類中分離出來,進行單獨的封裝。按照面向物件的思想將任務封裝成物件。

2.避免類java單繼承的侷限性。

所以,建立執行緒的第二種方式較為常用。