學習筆記06 多執行緒

2021-07-06 01:13:13 字數 2336 閱讀 9686

多執行緒:

2、實現runnable介面。//class myrunnable implements runnable{}

步驟:a:建立乙個類(myrunnable)實現runnable介面。

b:重寫runnable介面中run()方法,把要執行的**寫在run()方法中

c:在main函式中建立myrunnable類的物件(mr)

d:將第三步建立的物件mr作為 thread類的構造方法的引數進行傳遞,建立thread類的物件。

e:啟動執行緒。

//main函式中的**:

myrunnable mr = new myrunnable();

thread t1 = new thread(mr);

t1.start();

new thread(runnable r);

面試題:

多執行緒兩種實現方式的區別。

多執行緒執行的隨機性的原理:

cpu在程式間做著高效的切換,而執行緒搶到cpu資源的那一刻,足夠它做好多事兒了。

//就是執行緒在搶cpu資源,搶到資源的那一刻,足夠它做好多事兒了

獲取名字和設定名字:

public string getname();

public void setname(string name);

public static thread currentthread();  //返回當前正在執行的執行緒物件的引用

執行緒的預設命名規則:

「thread-」 加上編號。   編號是從0開始的。

另外幾個常用的方法:

休眠執行緒:

sleep(long mills);  //讓執行緒睡指定時間。(傳的是毫秒值。 毫秒,微秒,納秒)

//wait();

守護執行緒:

setdaemon(boolean flag);  //設定執行緒為守護執行緒,該執行緒不會單獨執行,當非守護執行緒都執行完畢後,自動結束。

理解:坦克大戰:

老鷹:非守護執行緒。

玩家:守護執行緒。

加入執行緒:

join();   //類似於插隊。 讓當前執行緒暫停,等待加入執行緒執行完畢後,在執行。

禮讓執行緒:

yield(); //讓出cpu資源

舉例;5個任務在搶cpu資源,假設任務1禮讓了cpu了,那麼這一瞬間,這五個任務又會開始重新搶cpu資源,

可能還是任務1先搶到,所以我們看到的效果不明顯。

設定執行緒的優先順序:

setpriority();

執行緒的預設優先順序是多少:5

執行緒的優先順序的範圍是多少: 1-10

執行緒的優先順序越高,一定會第乙個執行嗎?

不一定。執行緒的優先順序越高,只是從一定程度上來講,能讓該執行緒獲取更多的執行權。

同步:synchronized

大白話理解:就是多執行緒用來解決安全問題的。

概述:當多執行緒併發,有多段**同時執行的時候,我們需要某一段**執行期間,cpu不要做切換,就可以使用同步。

有兩個方法(method,function)都加了同步,method執行期間,會去執行function?

不會。同步**塊:

格式:synchronized(鎖物件)

同步方法:在方法的宣告上加上synchronized。

同步**塊的鎖物件是誰:任意物件。

同步方法的鎖物件是誰:

靜態:該類的位元組碼檔案物件

非靜態:this

注意:加鎖的時候,要使用同一把鎖,不然可能出現鎖不住的情況。

多執行緒模擬賣票,為什麼會出現負數和重複值的情況?

負數:最後一次判斷的時候,ticket的值是1,假如說,此時四個執行緒物件都進來了,那麼他們列印的順序就是:

* 開始執行

*  第一次:列印:第一張票  ,列印完了以後ticket變成0

*  第二次:列印:第0張票,列印完成後ticket的值變成-1

*  第三次:列印:第-1張票,列印完成後ticket的值變成-2

*  第四次:列印:第-2張票,列印完成後ticke的值變為-3

重複值:ticket--

// ticket = ticket - 1;

a:讀取ticket的值。

b:修改ticket的值。

c:將修改後的值賦值給ticket。

當執行到a之後,還沒有來得及執行b的時候,別的執行緒物件有列印操作。

這種情況產生的原因是什麼? 

就是由於多執行緒執行的隨機性和延遲性,導致結果可能會出現重複值或者負數。

多執行緒可能產生問題的原因:

a:是否有共享資料。

b:是否有多條語句來操作共享資料。

c:是否在多執行緒環境中。

多執行緒學習06 執行緒安全

執行緒安全 互斥鎖 執行緒同步 多執行緒的安全隱患 1,資源共享 1塊資源可能會被多個執行緒共享,也就是多個執行緒可能會訪問同乙個資源 比如多個執行緒訪問同乙個物件 同乙個變數 同乙個檔案。2,當多個執行緒訪問同一塊資源時,很容易引發資料錯亂和資料安全問題 安全隱患解決 互斥鎖 互斥鎖使用格式 sy...

多執行緒學習筆記 執行緒

thread類 常用屬性 currentthread 獲取當前正在執行的執行緒 isalive 指示當前執行緒的執行狀態 isbackground 指示是否為後台執行緒 isthreadpoolthread 指示是否屬於託管執行緒池 managedthreadid 獲取執行緒識別符號 name 獲取...

多執行緒學習筆記

多執行緒的相關概念 什麼是程序?當乙個程式開始執行時,它就是乙個程序,程序包括執行中的程式和程式所使用到的記憶體和系統資源。而乙個程序又是由多個執行緒所組成的。什麼是執行緒?執行緒是程式中的乙個執行流,每個執行緒都有自己的專有暫存器 棧指標 程式計數器等 但 區是共享的,即不同的執行緒可以執行同樣的...