您好我正在嘗試使用 JPA 存盤庫回圈并將物件保存到資料庫。我想在這里使用執行緒,但是當執行緒多個物件同時保存在同一個表上時,自動生成的主 ID 是否會發生沖突?
uj5u.com熱心網友回復:
您不需要回圈來保存資料。您可以將物體保存在集合中并呼叫 jpasaveAll()方法。
repository.saveAll(Iterable<S> entities)
uj5u.com熱心網友回復:
據我所知,您無需擔心資料庫級別的資料競爭,因為資料庫同時處理多個訪問,簡而言之,您就可以開始了。
但是還有一個問題讓我很擔心。我假設您正在開發一個在 Web 服務器上運行的 Web 應用程式,對嗎?由于 web-server 本身創建了最少 10 個執行緒來接收來自 Internet 的 http 請求,因此在代碼中創建額外的執行緒可能不是一個好主意。
假設一旦您呼叫方法 A() 它會創建額外的 1 個執行緒,并假設有 3 個請求被發送到同一個端點,因此 Web 服務器將每個請求分配給一個執行緒,并且在每個執行緒中呼叫方法 A()在這種情況下,您將擁有 3 個以上的新執行緒,如果您的流量很高,您最終可能會遇到執行緒數多于計算機處理能力的情況。
創建一個公共執行緒池供公共使用可能只是一個選項
或者
,如果不需要立即應用 Job,您可以撰寫另一個具有多個執行緒的批處理程式,并且可以使用類似 Redis 的訊息傳遞應用程式來處理通信。因此,您可以消除高請求和可擴展性中的障礙。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422752.html
標籤:
