Java響應式關聯式資料庫多執行緒實現方式

春風百里不及你發表於2020-11-30

Java處理異常的幾個小知識,如果 Java 方法不能按照正常的流程執行,那麼可以通過另外一種途徑退出:丟擲一個封裝了錯誤資訊的物件,這個就是Java的異常;當發生異常時,後面的程式碼無法繼續執行,而是由異常處理器繼續執行。

Java培訓

一、異常的分類

Throwable是所有異常的超類,下一級可以分為Error和Exception :

  1. Error

Error是指Java執行時系統內部的錯誤,或者說它代表了JVM本身的錯誤,通常都是比較嚴重的錯誤,比如記憶體溢位, 虛擬機器錯誤等等;Error通常和硬體或JVM有關,計算機軟體著作權證申請,個人申請計算機軟體著作權和程式本身無關,所以不能被程式碼捕獲和處理。

  1. Exception

我們經常說的異常是指Exception,又可以分成執行時異常和檢查異常。

RuntimeException:執行時異常,這類異常在編譯期間不強制程式碼捕捉,但是可能在在 JVM 執行期間丟擲異常;出現此類異常,通常是程式碼的問題,所以需要修改程式避免這類異常。常見的執行時異常,比如:NullPointerException、ClassCastException 等等。

CheckedException:檢查異常,這種異常發生在編譯階段,Java 編譯器會強制程式碼去捕獲和處理此類異常;比如:ClassNotFoundException、IllegalAccessException 等等。

二、異常的處理方法

捕獲異常使用 try…catch 語句,把可能發生異常的程式碼放到 try {…} 中,然後使用catch 捕獲對應的異常;我們也可以在程式碼塊中使用Throw向上級程式碼丟擲異常;在方法中使用 throws 關鍵字,向上級程式碼丟擲異常;

三、Throw和throws的區別

Throw在方法內,後面跟著異常物件;而throws是用在方法上,後面跟異常類;

Throw會丟擲具體的異常物件,當執行到Throw的時候,方法內的程式碼也就執行結束了;throws用來宣告異常,提醒呼叫方這個方法可能會出現這種異常,請做好處理的準備,但是不一定會真的出現異常。

四、使用Exception的一些建議

  1. 不要試圖通過異常來控制程式流程,哪裡可以申請軟體著作權,申請軟體著作權的作品一般有什麼要求比如開發一個介面,正確的做法是對入參進行非空驗證,當引數為空的時候返回“引數不允許為空”,而不應該捕捉到空指標的時候返回錯誤提示。

  2. 僅捕獲有必要的程式碼,儘量不要用一個try…catch 包住大段甚至整個方法內所有的程式碼,因為這樣會影響JVM對程式碼進行優化,從而帶來額外的效能開銷。

  3. 很多程式設計師喜歡catch(Exception e),其實應該儘可能地精確地指出是什麼異常。

  4. 不要忽略異常,捕捉到異常之後千萬不能什麼也不做,要麼在catch{…}中輸出異常資訊,要麼通過Throw或throws丟擲異常,讓上層程式碼處理。

  5. 儘量不要在catch{…}中輸出異常後,又向上層程式碼丟擲異常,因為這樣會輸出多條異常資訊,而且它們還是相同的,這樣可能會產生誤導。

  6. 不要在finally{…}中寫return,因為try{…} 在執行return之前執行 finally{…} ,如果 finally{…}中有return,那麼將不再執行try{…}中的return。

  7. Java多執行緒實現方式主要有三種:繼承Thread類、實現Runnable介面、使用ExecutorService、Callable、Future實現有返回結果的多執行緒。其中前兩種方式執行緒執行完後都沒有返回值,只有最後一種是帶返回值的。

Java培訓

1、繼承Thread類實現多執行緒

繼承Thread類的方法儘管被我列為一種多執行緒實現方式,但Thread本質上也是實現了Runnable介面的一個例項,它代表一個執行緒的例項,並且,啟動執行緒的唯一方法就是通過Thread類的start()例項方法。start()方法是一個native方法,貴陽軟體著作權申請,北京軟體著作權辦理它將啟動一個新執行緒,並執行run()方法。這種方式實現多執行緒很簡單,通過自己的類直接extend Thread,並複寫run()方法,就可以啟動新執行緒並執行自己定義的run()方法。例如:

[Java] view plain copypublic class MyThread extends Thread {

public void run() {

System.out.println(“MyThread.run()”);

}

}

在合適的地方啟動執行緒如下:

[Java] view plain copyMyThread myThread1 = new MyThread();

MyThread myThread2 = new MyThread();

myThread1.start();

myThread2.start();

2、實現Runnable介面方式實現多執行緒

如果自己的類已經extends另一個類,就無法直接extends Thread,此時,必須實現一個Runnable介面,如下:

[Java] view plain copypublic class MyThread extends OtherClass implements Runnable {

public void run() {

System.out.println(“MyThread.run()”);

}

}

為了啟動MyThread,全國軟體著作權申請,軟體著作權證照申請需要首先例項化一個Thread,並傳入自己的MyThread例項:

[Java] view plain copyMyThread myThread = new MyThread();

Thread thread = new Thread(myThread);

thread.start();

事實上,當傳入一個Runnable target引數給Thread後,Thread的run()方法就會呼叫target.run(),參考JDK原始碼:軟體著作權申請價格,軟體著作權申請專利

[Java] view plain copypublic void run() {

if (target != null) {

target.run();

}

}

3、使用ExecutorService、Callable、Future實現有返回結果的多執行緒

ExecutorService、Callable、Futurehttp://daduchang.net/446868.html這個物件實際上都是屬於Executor框架中的功能類。 這裡面對該框架做了很詳細的解釋。返回結果的執行緒是在JDK1.5中引入的新特徵,確實很實用,有了這種特徵我就不需要再為了得到返回值而大費周折了,而且即便實現了也可能漏洞百出。

可返回值的任務必須實現Callable介面,類似的,無返回值的任務必須Runnable介面。執行Callable任務後,可以獲取一個Future的物件,在該物件上呼叫get就可以獲取到Callable任務返回的Object了,再結合執行緒池介面ExecutorService就可以實現傳說中有返回結果的多執行緒了。

相關文章