2015-05-19 60 views

回答

1

這是否使它線程安全?

​​方法有所幫助,但他們只在一次一個方法提供線程安全。例如StringBuffer是線程安全的,但前提是您只使用一種方法使其變得毫無用處。

另外Iterator即使集合是線程安全的,通常也不是線程安全的,同樣,您需要調用多個方法,這意味着釋放調用之間的鎖定。

性能怎麼樣 - 如果我在同步方法中有數據庫訪問,性能會有多嚴重?

一些之間根本沒有和很多。然而,正確性應該是第一位的,如果錯誤的話速度有多快並不重要。

1

答案和往常一樣:取決於很多細節。

如果你的班級有內部狀態,它在方法調用之間進行,它將不是線程安全的。 -EDIT-如果一個類/對象是線程安全的,廣義上說,如果由多個線程所做的任何調用序列都會在實例中創建一個不一致的狀態。例如,如果你的類打開了一個JDBC連接,那麼你可以在沒有問題的情況下繼承那個連接,但是,如果你從一個方法給出了所述連接的ResultSet,那將是而不是安全,因爲當另一個線程請求來自同一連接的另一個結果集ResultSet中可能會變得無效 - /編輯 -

如果你把一個性能損失首先依賴於訪問多少時間在實際花費的數同步部分,即您的數據庫訪問需要多長時間