好,所以我瞭解同步做了什麼,並且我知道應該在兩種方法訪問同一條數據時使用它。您是否應該使用與DAO同步
現在我有從數據庫更新和讀取的Hibernate DAO方法。儘管它們訪問相同的數據庫,但這些方法都不共享任何數據對象(所以其中一種方法會更新它,而其他方法則會從中讀取它們)。我應該同步這些方法嗎?還是應該同步只用於數據對象而不是數據庫中的數據?
好,所以我瞭解同步做了什麼,並且我知道應該在兩種方法訪問同一條數據時使用它。您是否應該使用與DAO同步
現在我有從數據庫更新和讀取的Hibernate DAO方法。儘管它們訪問相同的數據庫,但這些方法都不共享任何數據對象(所以其中一種方法會更新它,而其他方法則會從中讀取它們)。我應該同步這些方法嗎?還是應該同步只用於數據對象而不是數據庫中的數據?
您應該同步,如果在不同的線程方法的併發執行可能會引起問題。如果你的方法本身是線程安全的(即沒有共享數據),它取決於你在方法中使用的資源是否是線程安全的。
在Hibernate數據庫的情況下,我認爲同步是沒有必要的。 (只是猜測,不看代碼)。 Hibernate和數據庫本身在保持數據一致方面非常好。 (假設你的數據庫和休眠設置是OK的)
還有一點需要考慮:同步代碼總是存在死鎖的危險。如果您長時間鎖定資源(如DB調用),則尤其如此。
因此,簡而言之:不知道更多的應用程序和設置:我不會同步此方法。 (YMMV)
謝謝,我想我應該沒有這樣就沒事了。 – OneTwo 2014-09-19 08:39:32
你應該在這個地方,使用鎖定在第一種方法更新數據,則只有其他方法應該看它。
http://docs.jboss.org/hibernate/orm/4.0/devguide/en-US/html/ch05.html
你的程序是否會失敗取決於你的代碼是如何組織的以及它試圖做什麼。 但是,在線程間共享連接並不是一個好習慣,因爲您面臨事務管理及其關聯隔離問題。
休眠中存在髒檢查概念。您可以使用此代替同步,因爲它會減慢您的過程。 – 2014-09-19 08:19:10