java讀數據超時(java超時等待)

本文目錄一覽:

雲南北大青鳥java培訓告訴你在Java程序中處理資料庫超時與死鎖?

每個使用關係型資料庫的程序都可能遇到數據死鎖或不可用的情況,而這些情況需要在代碼中編程來解決;本文主要介紹與資料庫事務死鎖等情況相關的重試邏輯概念,此外,還會探討如何避免死鎖等問題,文章以DB2(版本9)與為例進行講解。

什麼是資料庫鎖定與死鎖

鎖定(Locking)發生在當一個事務獲得對某一資源的「鎖」時,這時,其他的事務就不能更改這個資源了,這種機制的存在是為了保證數據一致性;在設計與資料庫交互的程序時,必須處理鎖與資源不可用的情況。鎖定是個比較複雜的概念,仔細說起來可能又需要一大篇,所以在本文中,只把鎖定看作是一個臨時事件,這意味著如果一個資源被鎖定,它總會在以後某個時間被釋放。而死鎖發生在當多個進程訪問同一資料庫時,其中每個進程擁有的鎖都是其他進程所需的,由此造成每個進程都無法繼續下去。

如何避免鎖

我們可利用事務型資料庫中的隔離級別機制來避免鎖的創建,正確地使用隔離級別可使程序處理更多的並發事件(如允許多個用戶訪問數據),還能預防像丟失修改(LostUpdate)、讀「臟」數據(DirtyRead)、不可重複讀(NonrepeatableRead)及「虛」(Phantom)等問題。

隔離級別問題現象

丟失修改讀「臟」數據不可重複讀「虛」

可重複讀取NoNoNoNo

讀取穩定性NoNoNoYes

游標穩定性NoNoYesYes

未提交的讀NoYesYesYes

表1:DB2的隔離級別與其對應的問題現象

在只讀模式中,就可以防止鎖定發生,而不用那些未提交只讀隔離級別的含糊語句。麗江電腦培訓發現一條SQL語句當使用了下列命令之一時,就應該考慮只讀模式了

北大青鳥java培訓:在Java程序中處理資料庫超時與死鎖?

每個使用關係型資料庫的程序都可能遇到數據死鎖或不可用的情況,而這些情況需要在代碼中編程來解決;本文主要介紹與資料庫事務死鎖等情況相關的重試邏輯概念,此外,還會探討如何避免死鎖等問題,文章以DB2(版本9)與為例進行講解。

什麼是資料庫鎖定與死鎖鎖定(Locking)發生在當一個事務獲得對某一資源的「鎖」時,這時,其他的事務就不能更改這個資源了,這種機制的存在是為了保證數據一致性;在設計與資料庫交互的程序時,必須處理鎖與資源不可用的情況。

鎖定是個比較複雜的概念,仔細說起來可能又需要一大篇,所以在本文中,只把鎖定看作是一個臨時事件,這意味著如果一個資源被鎖定,它總會在以後某個時間被釋放。

而死鎖發生在當多個進程訪問同一資料庫時,其中每個進程擁有的鎖都是其他進程所需的,由此造成每個進程都無法繼續下去。

如何避免鎖我們可利用事務型資料庫中的隔離級別機制來避免鎖的創建,正確地使用隔離級別可使程序處理更多的並發事件(如允許多個用戶訪問數據),還能預防像丟失修改(LostUpdate)、讀「臟」數據(DirtyRead)、不可重複讀(NonrepeatableRead)及「虛」(Phantom)等問題。

隔離級別問題現象丟失修改讀「臟」數據不可重複讀「虛」可重複讀取NoNoNoNo讀取穩定性NoNoNoYes游標穩定性NoNoYesYes未提交的讀NoYesYesYes表1:DB2的隔離級別與其對應的問題現象在只讀模式中,就可以防止鎖定發生,而不用那些未提交只讀隔離級別的含糊語句。

浙江電腦培訓發現一條SQL語句當使用了下列命令之一時,就應該考慮只讀模式了

java 方法 執行超時處理

java 1.5以上的Future類可以執行超時處理。

jdk1.5自帶的並發庫中Future類中重要方法包括get()和cancel(),get()獲取數據對象,如果數據沒有載入,就會阻塞直到取到數據,而 cancel()是取消數據載入。另外一個get(timeout)操作,表示如果在timeout時間內沒有取到就失敗返回,而不再阻塞。

代碼如下:

import java.util.concurrent.Callable;

import java.util.concurrent.ExecutionException;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.TimeUnit;

import com.sun.corba.se.impl.orbutil.closure.Future;

import com.sun.corba.se.impl.orbutil.threadpool.TimeoutException;

public class ThreadTest {  

  

    public static void main(String[] args) throws InterruptedException,  

            ExecutionException {  

          

        final ExecutorService exec = Executors.newFixedThreadPool(1);  

          

        CallableString call = new CallableString() {  

            public String call() throws Exception {  

                //開始執行耗時操作  

                Thread.sleep(1000 * 5);  

                return “線程執行完成.”;  

            }  

        };  

          

        try {  

            FutureString future = exec.submit(call);  

            String obj = future.get(1000 * 1, TimeUnit.MILLISECONDS); //任務處理超時時間設為 1 秒  

            System.out.println(“任務成功返回:” + obj);  

        } catch (TimeoutException ex) {  

            System.out.println(“處理超時啦….”);  

            ex.printStackTrace();  

        } catch (Exception e) {  

            System.out.println(“處理失敗.”);  

            e.printStackTrace();  

        }  

        // 關閉線程池  

        exec.shutdown();  

    }  

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/303665.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-31 11:50
下一篇 2024-12-31 11:50

相關推薦

  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發布。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字元串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字元串中是否存在多個指定字元: 一、字元串遍歷 字元串是Java編程中非常重要的一種數據類型。要判斷字元串中是否存在多個指定字元…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論