我正在用Java編寫一個多線程服務器,它將訪問數據庫並返回客戶端請求的數據庫信息。多線程服務器數據庫訪問
我的主要服務器類被寫爲一個靜態類,它基本上在客戶端連接到它時產生一個線程。
我的問題是在哪裏把所有的數據庫訪問方法?它們應該位於靜態主服務器類中嗎,還是應該放在服務器線程代碼中?
所有答案/解釋讚賞!
我正在用Java編寫一個多線程服務器,它將訪問數據庫並返回客戶端請求的數據庫信息。多線程服務器數據庫訪問
我的主要服務器類被寫爲一個靜態類,它基本上在客戶端連接到它時產生一個線程。
我的問題是在哪裏把所有的數據庫訪問方法?它們應該位於靜態主服務器類中嗎,還是應該放在服務器線程代碼中?
所有答案/解釋讚賞!
它應該保留在螺紋部分。因爲如果您在靜態服務器類中使用訪問方法,則爲數據庫交互創建的會話對象將變爲線程不安全。數據庫可能存在不一致的情況。
建議將數據庫連接部分保存在線程代碼中。使用線程池將是個好主意。您可以調整數據庫密集型應用程序的性能。以下是關於此問題的oracle的兩個重要文檔。
打開和關閉數據庫連接是不是最好的主意。嘗試使用線程池重用線程(及其連接)。
還有一些數據庫系統,你不能有多個(寫)連接。 Sqlite就是其中之一。在這種情況下,你可以使用靜態同步方法來訪問數據庫。
謝謝!這就是我最終做的,它似乎迄今爲止工作。 – eric121492
您可以使靜態方法同步。這將使他們線程安全。 – gtsouk