一.多線程的實現(xiàn)方案:
1.繼承Thread類
2.實現(xiàn)Runnable接口?
二.線程的調(diào)度和優(yōu)先級問題:
1.線程的調(diào)度
A:分時調(diào)度
B:搶占式調(diào)度(Java采用的就是這種);
2.獲取和設置線程的優(yōu)先級
獲取對象的優(yōu)先級:
?public final int getPriority();
?設置對象的優(yōu)先級
public final void setPriority();
A:默認是5
B:范圍是1-10;
三.線程的控制:
A:線程休眠:Thread.sleep(long ?millis);
B:線程加入:public ?final ?void ?join(); ?等待該線程終止再執(zhí)行其他的.
C:線程禮讓:public static void yield();暫停當前正在執(zhí)行的線程對象,并執(zhí)行其他線程.讓多個線程的執(zhí)行更和諧,但是不能保證一個線程執(zhí)行一次.
D:守護線程:public final void setDaemon(boolean on);將該線程標記為守護線程或用戶線程.當正在運行的線程都是守護線程的時候,Java虛擬機退出,該方法必須在啟動線程前調(diào)用.
E:線程終止:stop():這個方法已經(jīng)過時;現(xiàn)在用public void interrupt();中斷線程,把線程狀態(tài)終止,并且拋出一個InterruptedException.
四.出現(xiàn)線程安全問題的原因以及解決辦法:
1.原因:
A:是否有多線程環(huán)境.
B:是否有共享數(shù)據(jù).
C:是否有多條語句操作共享數(shù)據(jù).
2.解決辦法:
A:同步代碼塊
synchronized (同步鎖對象) {
? ? ? ? ? ? ? ?需要被同步的代碼;
}
這里的鎖對象可以是任意對象.
B:同步方法:
? ? ? ? ? ? 把同步關鍵字加在方法上.
a:非靜態(tài)方法
? ? ? ? ? ? ?這里的鎖對象是this.
b:靜態(tài)方法:
這里的鎖對象是類的字節(jié)碼文件對象.