執行緒
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時間片不是先分給程序然後再由程序分給程序下的執行緒的。所有...