導航:首頁 > 編程語言 > java線程異常處理

java線程異常處理

發布時間:2022-08-01 09:02:17

1. 關於java線程池中線程執行異常捕獲

線程拋出的異常,只能有那個線程捕獲,其他線程是無法捕獲的。你的線程池對象在主線程中,主線程無法捕獲其他線程的異常。
你可以使用線程間通信的方式,通知主線程,發生了異常。

2. java線程被異常終止了,怎麼監控

線程中用try catch包起來,
有異常時,做你想要的處理。
這樣不行嗎?

3. java中當子線程拋出異常時母線程繼續執行還是整個程序終止

子線程被創建後就跟母線程沒什麼關系了。每個線程都要去處理自己的事情,包括異常。當所有的線程都結束的時候才說明程序運行Over了。子線程拋它的異常,母線程接著做它的事情,如果子線程的異常被捕獲,且在處理異常時沒有結束這個線程,那麼線程是會繼續執行下去的,如果沒有處理異常,那子線程就要結束了,但是它不會影響到母線程。

4. JAVA中的異常處理機制的原理

對於可能出現異常的代碼,有兩種處理辦法:
第一、在方法中用try...catch語句捕獲並處理異常,catach語句可以有多個,用來匹配多個異常。例如:
public void p(int x){
try{
...
}catch(Exception e){
...
}finally{
...
}
}

第二、對於處理不了的異常或者要轉型的異常,在方法的聲明處通過throws語句拋出異常。例如:
public void test1() throws MyException{
...
if(....){
throw new MyException();
}
}
如果每個方法都是簡單的拋出異常,那麼在方法調用方法的多層嵌套調用中,Java虛擬機會從出現異常的方法代碼塊中往回找,直到找到處理該異常的代碼塊為止。然後將異常交給相應的catch語句處理。如果Java虛擬機追溯到方法調用棧最底部main()方法時,如果仍然沒有找到處理異常的代碼塊,將按照下面的步驟處理:
第一、調用異常的對象的printStackTrace()方法,列印方法調用棧的異常信息。
第二、如果出現異常的線程為主線程,則整個程序運行終止;如果非主線程,則終止該線程,其他線程繼續運行。
通過分析思考可以看出,越早處理異常消耗的資源和時間越小,產生影響的范圍也越小。因此,不要把自己能處理的異常也拋給調用者。
還有一點,不可忽視:finally語句在任何情況下都必須執行的代碼,這樣可以保證一些在任何情況下都必須執行代碼的可靠性。比如,在資料庫查詢異常的時候,應該釋放JDBC連接等等。finally語句先於return語句執行,而不論其先後位置,也不管是否try塊出現異常。finally 語句唯一不被執行的情況是方法執行了System.exit()方法。System.exit()的作用是終止當前正在運行的 Java 虛擬機。finally語句塊中不能通過給變數賦新值來改變return的返回值,也建議不要在finally塊中使用return語句,沒有意義還容易導致錯誤。

最後還應該注意一下異常處理的語法規則:
第一、try語句不能單獨存在,可以和catch、finally組成 try...catch...finally、try...catch、try...finally三種結構,catch語句可以有一個或多個,finally語句最多一個,try、catch、finally這三個關鍵字均不能單獨使用。
第二、try、catch、finally三個代碼塊中變數的作用域分別獨立而不能相互訪問。如果要在三個塊中都可以訪問,則需要將變數定義到這些塊的外面。
第三、多個catch塊時候,Java虛擬機會匹配其中一個異常類或其子類,就執行這個catch塊,而不會再執行別的catch塊。
第四、throw語句後不允許有緊跟其他語句,因為這些沒有機會執行。
第五、如果一個方法調用了另外一個聲明拋出異常的方法,那麼這個方法要麼處理異常,要麼聲明拋出。

那怎麼判斷一個方法可能會出現異常呢?一般來說,方法聲明的時候用了throws語句,方法中有throw語句,方法調用的方法聲明有throws關鍵字。

5. java的異常分類有哪些

異常的分類:Throwable包含了錯誤(Error)和異常(Excetion兩類)。Exception又包含了運行時異常(RuntimeException, 又叫非檢查異常)和非運行時異常(又叫檢查異常)。

Error是程序無法處理了, 如果OutOfMemoryError、OutOfMemoryError等等, 這些異常發生時, java虛擬機一般會終止線程。

運行時異常都是RuntimeException類及其子類,如 NullPointerException、IndexOutOfBoundsException等, 這些異常是不檢查的異常, 是在程序運行的時候可能會發生的, 所以程序可以捕捉, 也可以不捕捉. 這些錯誤一般是由程序的邏輯錯誤引起的, 程序應該從邏輯角度去盡量避免。

檢查異常是運行時異常以外的異常, 也是Exception及其子類, 這些異常從程序的角度來說是必須經過捕捉檢查處理的, 否則不能通過編譯. 如IOException、SQLException等。

6. Java編程時主線程如何捕獲子線程拋出的異常

下面代碼可以處理到線程中拋出的RuntimeException,希望能幫助到你:

public class ApplicationLoader extends ThreadGroup
{
private ApplicationLoader()
{

super("ApplicationLoader");

}

public static void main(String[] args)
{

Runnable appStarter = new Runnable()
{

public void run()
{
//invoke your application (i.e.MySystem.main(args)

throw new NullPointerException(); //example, throw a runtime

7. java子線程拋出異常後,怎麼讓主線程隨之結束

子線程執行System.exit(0),會停止主線程。
整個當前java進程會結束。所以進程中的所有線程也會隨時結束。

不過不理解你為什麼需要這種需求,這不是什麼好的處理異常的方式。

8. 關於JAVA中線程啟動SOCKET中的異常處理問題,望各位提出寶貴建議

加try catch 捕獲那個異常,延時再檢查網路後再重連

Ping
//using System.Net;
NetworkInformation.Ping p = new NetworkInformation.Ping();
NetworkInformation.PingOptions options = new NetworkInformation.PingOptions();
options.DontFragment = true;
string data = "";
byte[] buffer = Encoding.ASCII.GetBytes(data);
//Wait seconds for a reply.
int timeout = 4000
NetworkInformation.PingReply reply = p.Send(%%1, timeout, buffer, options);
%%2=reply.Status;

9. java中什麼叫運行時異常

(1)運行時異常都是RuntimeException類及其子類異常,如NullPointerException、IndexOutOfBoundsException等,這些異常是不檢查異常,程序中可以選擇捕獲處理,也可以不處理。這些異常一般是由程序邏輯錯誤引起的,程序應該從邏輯角度盡可能避免這類異常的發生。
當出現RuntimeException的時候,我們可以不處理。當出現這樣的異常時,總是由虛擬機接管。比如:我們從來沒有人去處理過NullPointerException異常,它就是運行時異常,並且這種異常還是最常見的異常之一。
出現運行時異常後,如果沒有捕獲處理這個異常(即沒有catch),系統會把異常一直往上層拋,一直到最上層,如果是多線程就由Thread.run()拋出,如果是單線程就被main()拋出。拋出之後,如果是線程,這個線程也就退出了。如果是主程序拋出的異常,那麼這整個程序也就退出了。運行時異常是Exception的子類,也有一般異常的特點,是可以被catch塊處理的。只不過往往我們不對他處理罷了。也就是說,你如果不對運行時異常進行處理,那麼出現運行時異常之後,要麼是線程中止,要麼是主程序終止。
如果不想終止,則必須捕獲所有的運行時異常,決不讓這個處理線程退出。隊列裡面出現異常數據了,正常的處理應該是把異常數據舍棄,然後記錄日誌。不應該由於異常數據而影響下面對正常數據的處理。

(2)非運行時異常是RuntimeException以外的異常,類型上都屬於Exception類及其子類。如IOException、SQLException等以及用戶自定義的Exception異常。對於這種異常,JAVA編譯器強制要求我們必需對出現的這些異常進行catch並處理,否則程序就不能編譯通過。所以,面對這種異常不管我們是否願意,只能自己去寫一大堆catch塊去處理可能的異常。

閱讀全文

與java線程異常處理相關的資料

熱點內容
access文件夾樹的構造 瀏覽:660
安卓多指操作怎麼設置 瀏覽:656
linux樹形目錄 瀏覽:727
平方根的簡單演算法 瀏覽:898
千牛訂單頁面信息加密取消 瀏覽:558
單片機自製紅外遙控燈 瀏覽:719
伺服器最小配置怎麼弄 瀏覽:853
ibm伺服器硬體如何升級 瀏覽:923
全球程序員節點贊 瀏覽:986
php函數傳遞數組 瀏覽:631
人工峰群演算法的目標函數 瀏覽:468
如何刪加密文檔 瀏覽:105
塗鴉app一鍵執行如何刪除 瀏覽:756
安卓手機如何打開fr3文件 瀏覽:743
壓縮袋8絲和14絲是什麼意思 瀏覽:647
程序員大咖java 瀏覽:70
蘋果手機文檔安卓上怎麼打開 瀏覽:527
如何做淘寶代理伺服器 瀏覽:672
gz壓縮文件夾 瀏覽:179
字母h從右往左跑的c語言編程 瀏覽:137