鄭州電腦學(xué)校老師講解下關(guān)于java多線程的處理方法
【鄭州電腦學(xué)校導(dǎo)讀】多線程編程在實際的網(wǎng)絡(luò)程序開發(fā)中,在客戶端程序?qū)崿F(xiàn)中使用的比較簡單,但是在服務(wù)器端程序?qū)崿F(xiàn)中卻不僅是大量使用,而且會出現(xiàn)比客戶端更多的問題。另外一個容易在服務(wù)器端出現(xiàn)的多線程問題是--死鎖。死鎖指兩個或兩個以上的線程為了使用某個臨界資源而無限制的等待下去。還是以前面衛(wèi)生間的例子來說明死鎖,例如兩個人都同時到達衛(wèi)生間,而且兩個人都比較禮貌,第一個人和第二個人說:你先吧,第二個人和第一個人說:你先吧。這兩個人就這樣一直在互相禮讓,誰也不進入,這種現(xiàn)象就是死鎖。這里的兩個人就好比是線程,而衛(wèi)生間在這里就是臨界資源,而由于這兩個線程在一直謙讓,誰也不使用臨界資源。死鎖不僅使程序無法達到預(yù)期實現(xiàn)的功能,而且浪費系統(tǒng)的資源,所以在服務(wù)器端程序中危害比較大,在實際的服務(wù)器端程序開發(fā)中,需要注意避免死鎖。而死鎖的檢測比較麻煩,而且不一定每次都出現(xiàn),這就需要在測試服務(wù)器端程序時,有足夠的耐心,仔細觀察程序執(zhí)行時的性能檢測,如果發(fā)現(xiàn)執(zhí)行的性能顯著降低,則很可能是發(fā)生了死鎖,然后再具體的查找死鎖出現(xiàn)的原因,并解決死鎖的問題。死鎖出現(xiàn)的最本質(zhì)原因還是邏輯處理不夠嚴(yán)謹,在考慮時不是很周全,所以一般需要修改程序邏輯才能夠很好的解決死鎖。
2. 線程優(yōu)先級
在多線程編程中,支持為每個線程設(shè)置優(yōu)先級。優(yōu)先級高的線程在排隊執(zhí)行時會獲得更多的CPU執(zhí)行時間,得到更快的響應(yīng)。在實際程序中,可以根據(jù)邏輯的需要,將需要得到及時處理的線程設(shè)置成較高的優(yōu)先級,而把對時間要求不高的線程設(shè)置成比較低的優(yōu)先級。在Thread類中,總計規(guī)定了三個優(yōu)先級,分別為:①、l MAX_PRIORITY--最高優(yōu)先級;②、l NORM_PRIORITY--普通優(yōu)先級,也是默認優(yōu)先級;③、l MIN_PRIORITY--最低優(yōu)先級。在前面創(chuàng)建的線程對象中,由于沒有設(shè)置線程的優(yōu)先級,則線程默認的優(yōu)先級是NORM_PRIORITY,在實際使用時,也可以根據(jù)需要使用Thread類中的setPriority方法設(shè)置線程的優(yōu)先級,該方法的聲明為:public final void setPriority(int newPriority)假設(shè)t是一個初始化過的線程對象,需要設(shè)置t的優(yōu)先級為最高,則實現(xiàn)的代碼為:t. setPriority(Thread. MAX_PRIORITY);這樣,在該線程執(zhí)行時將獲得更多的執(zhí)行機會,也就是優(yōu)先執(zhí)行。如果由于安全等原因,不允許設(shè)置線程的優(yōu)先級,則會拋出SecurityException異常。下面使用一個簡單的輸出數(shù)字的線程演示線程優(yōu)先級的使用,實現(xiàn)的示例代碼如下:
package priority;
public class TestPriority {
public static void main(String[] args){
PrintNumberThread p1 = new PrintNumberThread("高優(yōu)先級");
PrintNumberThread p2 = new PrintNumberThread("普通優(yōu)先級");
PrintNumberThread p3 = new PrintNumberThread("低優(yōu)先級");
p1.setPriority(Thread.MAX_PRIORITY);
p2.setPriority(Thread.NORM_PRIORITY);
p3.setPriority(Thread.MIN_PRIORITY);
p2.start();
)p3.start();
package priority;
{/* 輸出數(shù)字的線程*/
public class PrintNumberThread extends Thread {
String name; {
public PrintNumberThread(String name){
this.name = name;}
public void run(){
try{
for(int i = 0;i < 10;i++){
System.out.println(name + ":" + i);
}}catch(Exception e){} } }
在該示例程序,PrintNumberThread線程實現(xiàn)的功能是輸出數(shù)字,每次數(shù)字輸出之間沒有設(shè)置時間延遲,在測試類TestPriority中創(chuàng)建三個PrintNumberThread類型的線程對象,然后分別設(shè)置線程優(yōu)先級是最高、普通和最低,接著啟動線程執(zhí)行程序。從執(zhí)行結(jié)果可以看出高優(yōu)先級的線程獲得了更多的執(zhí)行時間,首先執(zhí)行完成,而低優(yōu)先級的線程由于優(yōu)先級較低,所以最后一個執(zhí)行結(jié)束。其實,對于線程優(yōu)先級的管理主要由系統(tǒng)的線程調(diào)度實現(xiàn),較高優(yōu)先級的線程優(yōu)先執(zhí)行,所以可以通過設(shè)置線程的優(yōu)先級影響線程的執(zhí)行。
更多相關(guān)鄭州電腦培訓(xùn)學(xué)校技術(shù)文章可訪問:http:///
本文由站河南北大青鳥校區(qū)整編而成,如需了解更多IT資訊類的文章、新聞、課程和學(xué)習(xí)技巧、就業(yè)案例、招生詳情等問題,可以對在線咨詢老師進行一對一問答!
推薦資訊
- 00后初中畢業(yè)生的出路?... 2020-07-10
- 直擊鄭州北大青鳥翔天信鴿校園歌... 2022-08-17
- 北大青鳥T58班李春燕就業(yè)感想... 2012-10-13
- 北大青鳥鄭州翔天就業(yè)明星T43陳款... 2012-10-13
- 為什么說高考落榜的學(xué)生最適合來... 2012-10-13
熱點資訊
- 電腦溫度多少是正常的情況呢?... 2018-09-07
- 四個策略及簡單的防護方法... 2018-09-07
- 對硬盤進行雙分區(qū)有什么好處... 2018-09-07
- 文件加密的幾個簡單方法... 2018-09-07
- 計算機小技巧,80G硬盤巧變變成... 2018-09-07