簡體   English   中英

多個線程如何通過使用Java中的同一連接來寫入數據庫?

[英]How can multiple Threads write to the database by using the same connection in java?

我有一個創建多個線程的程序,我需要其中任何一個都可以寫入數據庫。 問題是,如果我使用相同的連接,則由於多個線程訪問相同的變量(如statment.setString()),導致數據不正確。 如果我使用不同的連接,它將從線程中受益。 總結:我需要所有線程都將訪問一個類或另一個擁有1個連接並擁有一批查詢的線程,並且不時地執行一批批處理。 謝謝!

我認為這樣做沒有任何意義,但是如果您仍然想這樣做,那么建議您通過此連接同步對數據庫的訪問。 添加一些常見的LOCK對象,並執行以下操作:

synchronized(LOCK){
    // use connection by current thread including
    // sensitive operations which
    // need this synchronization
}

但是請注意,即使您正在使用多個線程,它們也會彼此等待,即它們通過此連接對DB的訪問將被序列化(而不是同時進行)。

您所描述的情況(許多線程正在訪問數據庫)正是Web應用程序中當前的情況。 推薦的做法是設置一個連接池,以減輕單個連接的爭用和每個線程一個連接的資源消耗。 Apache DBCP是這種連接池的一個示例。

如果您無法初始化多個連接,請在您的連接類中添加一個名為bound的布爾標志,單個線程不能使用連接“ if(bound)” ...使用該連接的任何線程都應在清除該標志時完成...在每個線程中添加while循環以檢查該標志,直到它變為false,然后將其設置為true並開始使用它...相當容易...您還可以為所有接受網絡的com創建第4個專用同步線程從隊列中的其他線程執行任務並同步執行它們,因此不會混亂...無論如何,有大約一百萬種方法,選擇更適合您的應用程序的方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM