多執行緒筆記

2022-05-05 08:42:09 字數 3642 閱讀 1503

【掌握的】

1.兩種方式建立執行緒:(繼承,實現)

2.繼承和實現的區分

3.執行緒的生命週期 

4.不同狀態下,所對應的方法。【通過哪些方法,可以讓執行緒達到某個狀態。】

5.同步**塊,同步方法。

1.學習多執行緒的原因?

生活中:

程式:  乙個完整的功能**。(方法,沒有被執行)

程序:  乙個完整的功能**。(方法,被執行)

執行緒:  程序包含執行緒。

好處:提高**的執行效率。總是有一些功能是需要同時執行的,那就需要多執行緒。

2.主線程:

-----執行main方法裡的**。

普通執行緒

------run 方法裡的**。

3.完成執行緒的步驟:

a. 編寫執行緒類:(1.通過繼承)

b. 重寫run方法:

c. 建立執行緒物件,呼叫start方法,開啟執行緒。

補充:(1) 執行緒物件.run();  沒有開啟執行緒,只是在呼叫執行緒物件的run()方法。                  

執行緒物件.start(); 執行緒開啟的標誌,自動呼叫run()方法

(2) 呼叫start()方法就立刻執行run()方法嗎?

執行緒物件.start(); ----當前執行緒所處的狀態是「就緒狀態」

真正執行run();----當前執行緒所處的狀態是「執行狀態」

----「就緒狀態」 和「執行狀態」 之間,間隔多久,不清楚。

(3)執行緒  【預設命】和【指定名】。

普通執行緒的預設名:thread-變數    ----變數static的,從0開始計數

主線程預設名:main

// private string name;   //1.接收外界傳入的引數,完成執行緒名。

// public thread1(string name)

public thread1(string name)

public void run()

}【2.通過實現完成執行緒】

a.編寫執行緒類:

b.。重寫run()方法

c。建立執行緒實現類物件,

建立執行緒物件,

執行緒物件呼叫方法,開啟執行緒。

補充: (1.) thread 實現 runnable介面

(2.)thread  th

thread2  th2

都實現runnable介面 ,在th .start();---th2.run()被執行。【**模式】

(3.)繼承方式, vs 實現方式  哪種執行緒類更好?

實現方式 好:

1.可以多實現

2.資料共享。

【例子:3個視窗同時銷售5張火車票】

【繼承方式:】

public class threadpiao extends thread }}

}【測試**】

new threadpiao().start();

new threadpiao().start();

new threadpiao().start();

【實現方式】

public class threadp implements runnable }}

}【測試**】

threadp tp=new threadp();

new thread(tp).start();

new thread(tp).start();

new thread(tp).start(); 

問題:繼承方式,可不可以只new 1個執行緒物件,然後呼叫3次start()方法?

4.執行緒狀態/生命週期:

a.新生狀態:   new 執行緒類();

b.就緒狀態:   start();  【有被執行的資格,但是還沒有被cpu排程;佇列】

c.執行狀態:   run();   

d.阻塞狀態:  sleep():  禮讓 yi  ();  強制 join();

d.死亡狀態:a。正常執行緒結束 b。發生異常,產生異常物件,沒有被截獲。

c。執行緒自身呼叫了stop()。---不被使用

4.1新生狀態:

建立執行緒物件,可以呼叫無參,有參(給執行緒命名)

---可以獲得到的資訊:

1.獲得執行緒物件。名字 thread.currentthread().getname()

2.設定或獲得當前執行緒的優先順序:

th.setpriority(9);

system.out.println("執行緒優先順序最大是:"+thread.max_priority);

system.out.println("執行緒優先順序最大是:"+thread.min_priority);

system.out.println("th1的執行緒優先順序是:"+th.getpriority());

4.2就緒狀態:

是否處於就緒狀態:thread.currentthread().isalive()

4.3執行狀態:

程式執行run();【有被執行的資格,同時也被cpu排程。但是至於什麼時間被執行的,不清楚】

4.4阻塞狀態:

【執行緒強制執行:join()】

for (int i = 1; i <=10; i++) catch (interruptedexception e)

}system.out.println(thread.currentthread().getname()+"--"+i);

}說明:普通執行緒強制搶占了cpu資源。

主線程:由原來的執行狀態----》阻塞狀態---就緒狀態---執行狀態

普通執行緒:直接執行結束。

使用場合:執行緒有明確的【完成先後順序】。  

【執行緒休眠:sleep()】

for (int i = 1; i <=10; i++)

system.out.println(thread.currentthread().getname()+"--"+i);

}說明:(1)當前執行緒休眠:由原來的執行狀態----》阻塞狀態---就緒狀態---執行狀態

---休眠時間結束,進入到就緒狀態,等待cpu排程。

(2)中途阻止休眠:(了解)    

【例子:】

終止休眠: 1. th.interrupt();

2.  在異常捕獲的時候,出現return。

【執行緒禮讓:】

for (int i = 0; i < 10; i++)

system.out.println(i);

}說明:讓出當前這次cpu資源:執行緒狀態不阻塞---直接進行就緒狀態--執行狀態。

5.執行緒安全:

多執行緒同時運算元據資源,會出現資料不正確。所需執行緒同步。

public void run() catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"--"+piao--);}}

}}第二種方式:同步方法:

public void run()

}public synchronized void maip() catch (interruptedexception e)

system.out.println(thread.currentthread().getname()+"--"+piao--);}}

多執行緒筆記

1 stdin fileno 在unix一些系統呼叫中使用到stdin fileno表示標準輸入,stdout fileno表示標準輸出,stderr fileno表示標準出錯,使用時需要加標頭檔案 在unix下還有stdin,stdout,stderr表示同樣的含義。stdin fileno與st...

多執行緒筆記

一.程序 就是cpu所要執行的乙個任務 自己理解的 執行緒 執行緒是乙個併發執行的順序流,乙個程序包括多個順序執行流程,這執行流程稱為執行緒 就是任務中許多的 二.執行緒排程分配cpu的時間片段給不同的執行緒,得到時間片段的執行緒被cpu執行,其他執行緒等待,執行緒排程會盡可能的分配時間片段取執行。...

多執行緒筆記

1.執行緒的建立方法 繼承thread類 實現runnable介面 重寫run方法 實現callable介面 重寫call方法 2.靜態 簡單來說,靜態 就是 物件和目標物件實現同樣的介面,物件會將目標物件傳遞進來,用目標物件來呼叫方法並新增自己的操作。new thread system.out.p...