javaAPI 多執行緒)

2021-07-03 22:17:25 字數 3457 閱讀 7200

執行緒

1、概述

巨集觀來講

程序:就是正在執行的程式

執行緒:就是程序的執行路徑,執行單元

2、建立乙個執行緒的兩種方式(掌握)

定義乙個類繼承thread類

public

class

aextends

thread

new a().start();

定義乙個類實現runnable介面,並且重寫run()方法

public

class

aimplements

runnable

}new thread(new a()).start();

3、執行緒的隨機性原理

多個程式實際是通過cpu在做高效切換實現的

4、執行緒的宣告週期(掌握)

新建 –> 就緒 –> 執行 –>阻塞 –> 死亡

這裡要注意,執行緒阻塞後就無法執行,回到就緒狀態

鎖,同步**塊,同步方法

1、同步**塊

synchronized(鎖物件)

注意

多個執行緒必須使用同乙個鎖物件,要不然鎖無效

2、同步方法(掌握)

public synchronized void show(){} //普通方法的鎖是this

public static synchronized void show(){} //靜態方法的鎖是當前類的位元組碼檔案物件 類名.class

3、注意問題

多個執行緒必須使用同乙個鎖物件,要不然鎖無效

同步**塊鎖可以是任意物件

同步方法的鎖是this

靜態方法的鎖是當前類的位元組碼檔案物件 類名.class

4、什麼時候用同步**塊,什麼時候用同步方法

盡可能用同步**塊

如果乙個方法內的所有**都被同步**塊包住了,那就用同步方法就可以了

5、死鎖

死鎖原因總結

執行緒1自身拿著乙個鎖:a鎖,執行緒2自身拿著乙個鎖:b鎖

當執行緒1要用b鎖,執行緒b要用a鎖的時候就會發生死鎖

多個執行緒操作同一資料的問題(執行緒鍵通訊問題)

執行緒鍵通訊:

其實就是多個執行緒同時操作同乙個物件

等待喚醒機制

1、前提

兩個執行緒共用一把鎖,此時可以呼叫該鎖的wait和notify方法,實現等待喚醒機制

2、illegalmonitorstateexception異常原因及解決辦法

如果當前的執行緒不是此物件鎖的所有者,缺呼叫該物件的notify(),notify(),wait()方法時丟擲該異常

換句話說就是當前執行緒中的同步**塊的鎖 和 呼叫這三個方法的鎖物件不一致就會報錯,例如

synchronized(student.class)

注意 必須有執行緒現在自食用object.class鎖
3、sleep和wait的區別

wait:是object類的方法,可以不用傳遞引數,釋放鎖物件

sleep:是thread類的靜態方法,需要傳遞引數

案例:共享資料(學生類)

//共享資料(學生類)

public

class

student

}//執行緒1:負責修改共享資料

public

class

setthread

extends

thread

@override

public

void

run() catch (interruptedexception e)

}if (i % 2 == 0) else

i++;

stu.flag = true;

stu.notify();}}

}}//執行緒2:負責獲取共享資料資訊

public

class

getthread

extends

thread

@override

public

void

run() catch (interruptedexception e)

}system.out.println(stu);

stu.flag = false;

stu.notify();}}

}}//測試

public

class

test

}

執行緒的優先順序(thread類中)

1、執行緒優先順序級別

執行緒預設優先順序是5。範圍是1-10

thread.max_priority //10

thread.min_priority //1

thread.norm_priority //5

2、方法

public final int getpriority():獲取執行緒優先順序

public final void setpriority(int newpriority):更改執行緒的優先順序

3、注意

優先順序可以在一定的程度上,讓執行緒獲較多的執行機會

4、舉例

mythread t = new mythread();

system.out.println(t.getpriority());

t.setpriority(thread.max_priority);

暫停執行緒(thread類中)

1、概述

暫停當前正在執行的執行緒,讓其他執行緒執行

2、成員方法

public static void yield():暫停當前正在執行的執行緒物件,並執行其他執行緒。

3、注意

是為了讓執行緒更和諧一些的執行,但是你不要依賴這個方法保證,如果要真正的實現資料依次輸出,請使用等待喚醒機制

加入執行緒(thread類中)

1、概念

如果呼叫乙個執行緒的join方法,那麼其他執行緒必須等待該執行緒執行完畢後才能執行

2、成員方法

public final void join():等待該執行緒終止

執行緒啟動後呼叫該方法
守護執行緒(thread類中)

1、成員方法

public final void setdaemon(boolean on):設定執行緒為守護執行緒,一旦前台(主線程),結束,守護執行緒就結束了

2、注意

main方法就本身是乙個執行緒,我們在main方法裡建立執行緒,並且設定執行緒為守護執行緒後,main方法結束後,守護執行緒就自動結束了

多執行緒 多執行緒原理

我們首先要知道什麼是多執行緒,說白了就是多個執行緒,執行緒是什麼呢,其實就是程序執行的途徑,那麼說道這裡我們又引入了乙個新的名字,就是程序,那麼我們來看看什麼是程序,其實我們自己也能看到,啟動電腦的任務管理器,我們就可以看到程序選項,裡面是我們電腦所有的程序,我們會發現有很多的程序.簡單地說就是程序...

多執行緒(一) tomcat 多執行緒

web server允許的最大執行緒連線數還受制於作業系統的核心引數設定,通常windows是2000個左右,linux是1000個左右。1.編輯tomcat安裝目錄下的conf目錄下的server.xml檔案 maxthreads 150 表示最多同時處理150個連線,tomcat使用執行緒來處理...

多執行緒 理解多執行緒(一)

程序 程序是cpu分配資源的基本單位 執行緒 執行緒是cpu排程的基本單位 資源分配給程序,所有執行緒共享該程序的資源 當執行緒數大於cpu的數量,會出現時間片的輪詢。cpu時間片是直接分配給執行緒的,執行緒拿到cpu時間片就能執行了 cpu時間片不是先分給程序然後再由程序分給程序下的執行緒的。所有...